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

使用NetworkX生成无自环无向图的代码问题及修正咨询

问题分析与修正方案

现有代码的核心错误

  • 错误地将new_node(当前节点数,整数)传入random.choice(),这是无效操作,应该从已存在的节点集合中选取目标节点
  • 错误使用边的数量new_edge作为连接目标,新增节点需要连接到已有节点而非边的计数
  • 存在未定义变量node,会导致代码运行报错
  • 未实现“每次新增节点时连接2个随机已有节点”的逻辑,反而错误连接到边计数,导致边数增长不符合预期

修正后的代码

import random
import networkx as nx
    
def generateGraph(n):
    if n < 2:
        raise ValueError("节点数n不能小于2")
    G = nx.Graph()
    # 初始化2个节点和1条边
    G.add_nodes_from([0, 1])
    G.add_edge(0, 1)
    
    while G.number_of_nodes() < n:
        new_node = G.number_of_nodes()
        G.add_node(new_node)
        # 从已有节点中随机选取2个不同的节点
        existing_nodes = list(G.nodes())[:-1]  # 排除刚添加的新节点
        target_nodes = random.sample(existing_nodes, 2)
        # 连接新节点到这两个目标节点
        G.add_edge(new_node, target_nodes[0])
        G.add_edge(new_node, target_nodes[1])
    return G

修正说明

  1. 增加节点数合法性校验,避免n<2的非法输入
  2. 使用add_nodes_from简化初始化节点的代码
  3. 每次迭代时,从**已存在的节点集合(排除刚添加的新节点)**中用random.sample选取2个不同的节点,保证无自环且连接到不同节点
  4. 每次新增节点时添加2条边,符合预期的边数增长规律:n节点对应2n-3条边(比如n=3时3条,n=4时5条,n=5时7条)

内容的提问来源于stack exchange,提问作者Keithx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:01:17