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
相关产品推荐
相关产品推荐

