You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:01:02