在 Python 中查找所有具有 n 个节点的简单无向图的成本总和的程序
假设我们有一个有n个节点的无向图G。现在考虑一个简单的无向图的成本是其节点成本的总和。并且一个节点的成本是D^k,其中D是它的度数。现在我们有n和k值。我们必须找到所有可能的具有n个节点的简单无向图的成本之和。结果可能非常大,因此返回结果模1005060097。
因此,如果输入类似于n=3k=2,那么输出将是36,因为有8个具有3个节点的简单图。
一张只有3条边的图,其成本为2^2+2^2+2^2=12。
有两条边的图,每条边的成本是1^2+1^2+2^2=6。
三个图有一条边,每个图的代价是0^2+1^2+1^2=2。
一张没有边的图,其成本为0^2+0^2+0^2=0。
所以,总数是12*1+6*3+2*3+0*1=36。
示例
让我们看看以下实现以获得更好的理解-
def choose(n, k):
product = 1
for i in range(n, n-k, -1):
product *= i
for i in range(1, k+1):
product /= i
return int(product)
def util(d, n):
return choose(n-1, d) * 2 ** (choose(n-1, 2))
def solve(n, k):
total = 0
for d in range(n):
total += util(d, n) * d ** k
total %= 1005060097
return (total * n) % 1005060097
n = 3
k = 2
print(solve(n, k))输入
3, 2输出结果
36