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

Networkx中图顶点重编号:将起始编号从1改为0

修改Networkx代码将顶点编号从1改为0

要把顶点编号起始值从1改成0,只需要调整代码中所有基于循环变量生成节点编号的地方——原代码通过给循环变量u/v加1来实现1开头的编号,现在直接使用变量本身即可得到0开头的编号。具体修改如下:

修改后的完整代码

import networkx as nx
N=2

def pos():
    x, y = 1, N + 3 - 1
    for _ in range(2 * N * (N + 1)):
        yield (x, y)
        y -= (x + 2) // (N + 3)
        x = (x + 2) % (N + 3)

G = nx.Graph()
it_pos = pos()
for u in range(2 * N * (N + 1)):
    # 直接用u作为节点编号,不再加1
    G.add_node(u, pos=next(it_pos))
    if u % (2 * N + 1) < N:
        for v in (u - 2 * N - 1, u - N - 1, u - N):
            # 检查v是否存在,不再用v+1
            if G.has_node(v):
                # 边连接u和v,不再加1
                G.add_edge(u, v)
    elif u % (2 * N + 1) == N:
        # 边连接u和(u - N),对应原逻辑的节点映射调整
        G.add_edge(u, u - N)
    elif u % (2 * N + 1) < 2 * N:
        for v in (u - 1, u - N - 1, u - N):
            # 边连接u和v,不再加1
            G.add_edge(u, v)
    else:
        for v in (u - 1, u - N - 1):
            # 边连接u和v,不再加1
            G.add_edge(u, v)

nx.draw(G, nx.get_node_attributes(G, 'pos'), with_labels=True, font_weight='bold')

关键修改点说明

  • 添加节点时:将G.add_node(u+1, ...)改为G.add_node(u, ...),直接用从0开始的循环变量u作为节点编号
  • 节点存在性检查:将if G.has_node(v + 1)改为if G.has_node(v),匹配0开头的节点编号规则
  • 边的添加逻辑:把所有G.add_edge(u + 1, v + 1)或G.add_edge(u + 1, u - N + 1)这类写法,调整为G.add_edge(u, v)或G.add_edge(u, u - N),确保边连接的是正确的0开头节点

修改后运行代码,生成的网络顶点编号就会从0开始(原当前输出节点为1-6,修改后变为0-5),与预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:15:36