以立方体为例,有8个节点,12条边,每个节点连接3个节点。
使用networkx,我必须手动输入所有边缘。例如,下面的代码是构建一个包含二十面体所有边的图(12 个节点,30 个边,每个节点 5 个相邻节点)。
import networkx as nx
G = nx.Graph()
nodes = list(range(12))
edges = [
[0, 1], [0, 2], [0, 3], [0, 4], [0, 5],
[1, 2], [1, 6], [1, 10], [1, 5],
[2, 3], [2, 6], [2, 7],
[3, 4], [3, 7], [3, 8],
[4, 5], [4, 8], [4, 11],
[5, 11], [5, 10],
[6, 7], [6, 9], [6, 10],
[7, 8], [7, 9],
[8, 9], [8, 11],
[9, 10], [9, 11],
[10, 11],
]
G.add_nodes_from(nodes)
G.add_edges_from(edges)
我的问题是如何在不手动编写的情况下获得所有可能的边缘。每个节点的名称可以随机初始化。
据我所知, igraph中的 Erdős-Rényi 模型无法约束相邻节点。
from igraph import *
g = Graph.Erdos_Renyi(12, m=30, directed=False)
g.get_edgelist()
"""
[(0, 1),
(0, 2),
(1, 3),
(2, 3),
(0, 4),
(1, 4),
(3, 5),
(4, 6),
(5, 6),
(0, 7),
(2, 7),
(3, 7),
(6, 7),
(0, 8),
(1, 8),
(3, 8),
(0, 9),
(3, 9),
(4, 9),
(6, 9),
(0, 10), node10 has more than 5 edges.
(2, 10),
(3, 10),
(5, 10),
(7, 10),
(8, 10),
(1, 11),
(2, 11),
(4, 11),
(9, 11)]
"""