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

图顶点重排:按Petersen图顺序调整及代码实现咨询

实现Petersen图顶点按标准顺序重排

看起来你已经搭好了Petersen图的基础结构,我来帮你补全代码并实现顶点重排的功能。从你的代码来看,目标应该是让图的顶点按照Petersen图的经典顺序(外圈1-5、内圈6-10)重新排列,下面是具体的实现方案:

补全并完善代码

import networkx as nx

# 你的Petersen图邻接表定义
grafoPetersen = { 
    1: [2,5,6], 
    2: [3,1,7], 
    3: [4,2,8], 
    4: [5,3,9], 
    5: [1,4,10], 
    6: [1,8,9], 
    7:[2,9,10], 
    8: [3,10,6], 
    9: [4,6,7], 
    10: [5,7,8] 
}

# 保留你添加的辅助节点(构建图时会跳过它们)
for k in grafoPetersen:
    grafoPetersen[k].append(-1)
    grafoPetersen[k].append(-2)
grafoPetersen[-1] = list(range(1,11))
grafoPetersen[-2] = list(range(1,11))

# 定义Petersen图的标准顶点顺序(外圈1-5,内圈6-10)
# 如果想按你的哈密顿路径重排,直接换成rutaHamiltoniana即可
petersen_standard_order = [1,2,3,4,5,6,7,8,9,10]

# 构建NetworkX无向图
g = nx.Graph()
for k, vs in grafoPetersen.items():
    for v in vs:
        # 跳过辅助节点,同时避免重复添加无向边
        if v in [-1, -2] or k in [-1, -2]:
            continue
        if k < v:  # 无向图中每条边只添加一次
            g.add_edge(k, v)

# 方式1:生成按标准顺序排列的邻接表
reordered_adj = {}
for node in petersen_standard_order:
    # 去掉辅助节点的连接,保留原始邻接关系
    reordered_adj[node] = sorted(grafoPetersen[node][:3])

print("按标准顺序重排的邻接表:")
for node, neighbors in reordered_adj.items():
    print(f"{node}: {neighbors}")

# 方式2:在NetworkX中按标准顺序输出邻接矩阵/用于可视化
ordered_nodes = petersen_standard_order
adj_matrix = nx.to_numpy_array(g, nodelist=ordered_nodes)
print("\n按标准顺序的邻接矩阵:")
print(adj_matrix)

关键细节解释

  1. 补全图的构建逻辑:添加了if k < v的判断,避免无向图中重复添加双向边(比如1-2和2-1只需要添加一次)。
  2. 自定义重排顺序:petersen_standard_order是经典的Petersen顶点顺序,如果你想按你定义的哈密顿路径rutaHamiltoniana重排,直接替换这个列表就行。
  3. 两种重排场景:
    • 如果你需要结构化的邻接表,用方式1生成按顺序排列的字典即可;
    • 如果你需要用于可视化、矩阵计算等NetworkX操作,方式2通过指定nodelist参数就能让输出结果遵循你想要的顶点顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:52