重新排列图的顶点。它应该像彼得森图那样有序

2024-04-23 15:04:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下一个代码:

import networkx

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))

rutaHamiltoniana = [8, 3, 4, 5, 10, 7, 2, 1, 6, 9];
g = networkx.Graph()
for k, vs in grafoPetersen.items():
    for v in vs:
        if v in [-1, -2] or k in [-1, -2]:
            continue
        if abs(rutaHamiltoniana.index(k) - rutaHamiltoniana.index(v)) == 1:
            g.add_edge(k,v, color='red', width=1.5)
        else:
            g.add_edge(k,v, color='black', width=0.5)

posicion = networkx.circular_layout(g)
edges = g.edges()
colores = [g[u][v]['color'] for u,v in edges]
anchuras = [g[u][v]['width'] for u,v in edges]
networkx.draw(g, posicion, edges=edges, edge_color=colores, width=anchuras, with_labels = True)

我得到的输出如下:

Output

我的图表是彼得森的图表,我想显示如下:

Petersen

但我在第一张照片里用了同样的风格。在

我试过了,就像:

^{pr2}$

正如这里建议的:How to show a graph like a Petersen's graph但是我有几个错误。在

你知道怎么把第一个图片解析成第二个图片保持第一个图片的样式吗?在


编辑1:这里是完整的代码,我如何获得彼得森的图形路径,并绘制它像第一个图片:Hamiltonian path inside Petersen's graph algorithm

Tags: 代码innetworkxfor图片rangewidthlist
1条回答
网友
1楼 · 发布于 2024-04-23 15:04:13

nlist中的列表定义了要放置在同心圆(shell)上的节点分组。节点由它们的ID定义,我们在grafoPetersen中定义:1,2,…,10

networkx.draw_shell(g, nlist=[range(5,10), range(5)])

此调用将一个同心圆上的range(5,10)=[5,6,7,8,9]和第二个同心圆上的range(5)=[0,1,2,3,4]分组。但是,grafoPetersen中没有定义ID为0的节点。此外,我们定义了一个ID为10的节点,它不是由两个范围中的任何一个表示的。在

因此,为了解决这个问题,我们必须确定范围:

^{2}$

还有各种花哨的选择:

networkx.draw_shell(g, nlist=[range(6,11), range(1,6)], edge_color=colors, width=widths)

enter image description here

相关问题 更多 >