以下函数返回一个随机生成的大小为 的邻接矩阵nxn
,表示一个图。
import random
def random_adjacency_matrix(n):
matrix = [[random.randint(0, 1) for i in range(n)] for j in range(n)]
# No vertex connects to itself
for i in range(n):
matrix[i][i] = 0
# If i is connected to j, j is connected to i
for i in range(n):
for j in range(n):
matrix[j][i] = matrix[i][j]
return matrix
这是一个非常幼稚的解决方案,我希望它满足两个额外的要求。
矩阵表示的图必须是全连接的,换句话说,不能有任何节点在一定数量的步骤中无法从任何其他节点到达。
每个节点都有许多边。现在它是完全随机的,因此一个节点有多少边相当一致,当
n
它很大时,所有图的平均边数往往也很大。我希望每个节点的平均边数变化更大,与图的大小无关,这样一些图的连接很少,而另一些则有很多。
编辑:使用 networkx 包,这似乎是我想要的,只有上面的第 1 点也满足:
import networkx, random
G = networkx.binomial_graph(50, random.random()) # 50 nodes, random probability of an edge