随机的邻接矩阵,边界数量变化

2024-05-02 03:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的函数返回一个大小为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

这是一个非常简单的解决方案,我希望它能满足两个额外的需求。

  1. 矩阵表示的图必须是完全连接的,换句话说,在某些步骤中,不能有任何节点无法从任何其他节点访问。

  2. 每个节点都有许多边。现在它是完全随机的,因此一个节点有多少条边是相当一致的,当n很大时,所有图的平均边数也会很大。我希望每个节点的平均边数变化更大,与图的大小无关,这样一些图很少有连接,而另一些图有很多连接。

编辑: 使用networkx包,这似乎是我想要的,只有上面的第1点也满足了:

import networkx, random
G = networkx.binomial_graph(50, random.random()) # 50 nodes, random probability of an edge

Tags: to函数inimportnetworkxfor节点is