gpt4 book ai didi

python - 给定一个节点集,枚举其上的图

转载 作者:行者123 更新时间:2023-12-01 06:36:30 25 4
gpt4 key购买 nike

我有一个节点集

N=[1,2,....n]

我可以在此节点集上定义 2^(nC2) 个图。我想按照边数以非递减的顺序枚举它们中的每一个。有没有一种有效的方法可以在 python networkx 中做到这一点?假设无向图,通过枚举图,我基本上意味着枚举邻接矩阵。

最佳答案

这可以使用下面的代码来实现。基本上,我们使用 itertools 生成表示所有可能图的列表,根据它们包含的边数对它们进行排序,生成表示该图的列表字典,然后返回与这些列表字典相对应的 networkx 图列表。

代码:

from math import factorial as f
import networkx as nx
import itertools

def nCr(n,r):
return f(n) // f(r) // f(n-r)

def get_all_graphs(n):
rows = sorted(itertools.product(range(2), repeat=nCr(n,2)), key= lambda x: sum(x))

indices = [sum(range(n-1, n-i-1, -1)) for i in range(n)] + [sum(range(n))]

graphs = [{node: [j+node+1 for j, edge in enumerate(row[indices[node] : indices[node+1]]) if edge == 1] for node in range(n)} for row in rows]

return [nx.from_dict_of_lists(x) for x in graphs]

示例:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2, ncols=4)

graphs = get_all_graphs(3)

for i, row in enumerate(ax):
for j, col in enumerate(row):

nx.draw(graphs[i*4+j], with_labels=True, ax=col)

plt.tight_layout()
plt.show()

输出:

enter image description here

或者上面的例子适用于 n=4:

enter image description here

关于python - 给定一个节点集,枚举其上的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59643724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com