如何用Python从随机0-1矩阵构建节点最多3条边的图?
实现方案
我们要构建一个N个节点的无向图,邻接矩阵中my_matrix[i][j] = 1表示节点i和j之间有边,且每个节点的相连边数(度数)不超过3。以下是具体实现:
核心思路
- 邻接矩阵保持对称(无向图特性,A连B则B连A),对角线始终为0(节点不与自身相连)
- 逐个处理每个节点,先统计已有的边数,再随机补充最多到3条边,避免重复连接
完整代码
import numpy as np from random import sample N = int(input("Enter the number of nodes:")) my_matrix = np.zeros((N,N), dtype='int8') for i in range(N): # 统计当前节点已有的边数 current_degree = np.sum(my_matrix[i]) # 计算还能添加的边数上限 addable = 3 - current_degree if addable <= 0: continue # 筛选可连接的候选节点:排除自己、排除已相连的节点 candidates = [j for j in range(N) if j != i and my_matrix[i][j] == 0] if candidates: # 随机选不超过addable数量的节点 selected_nodes = sample(candidates, min(addable, len(candidates))) for j in selected_nodes: # 无向图双向赋值 my_matrix[i][j] = 1 my_matrix[j][i] = 1 # 验证输出 print("各节点度数:") for idx in range(N): print(f"节点{idx}: {np.sum(my_matrix[idx])}") print("\n生成的邻接矩阵:") print(my_matrix)
关键细节说明
- 自动适配节点数量:如果节点数过少(比如N=2),每个节点最多只能连1条边,代码会自动调整,不会报错
- 若需要构建有向图,只需删除
my_matrix[j][i] = 1这一行即可 - 每次选节点都避开已连接的节点,不会出现重复边
内容的提问来源于stack exchange,提问作者gmomma10
相关产品推荐
相关产品推荐

