图顶点重排:按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)
关键细节解释
- 补全图的构建逻辑:添加了
if k < v的判断,避免无向图中重复添加双向边(比如1-2和2-1只需要添加一次)。 - 自定义重排顺序:
petersen_standard_order是经典的Petersen顶点顺序,如果你想按你定义的哈密顿路径rutaHamiltoniana重排,直接替换这个列表就行。 - 两种重排场景:
- 如果你需要结构化的邻接表,用方式1生成按顺序排列的字典即可;
- 如果你需要用于可视化、矩阵计算等NetworkX操作,方式2通过指定
nodelist参数就能让输出结果遵循你想要的顶点顺序。
内容的提问来源于stack exchange,提问作者JuMoGar
相关产品推荐
相关产品推荐

