Покажите, какие края взяты в MultiGraph - PullRequest
0 голосов
/ 08 октября 2018

Я хочу посмотреть, какой край был взят по кратчайшему пути, чтобы я знал, прошел ли он через синий провод или красный провод.Ниже приведен пример того, что я реализовал в более широком масштабе.Я знаю, что он будет проходить через «красный» провод здесь, но я хочу видеть его, когда я делаю nx.shortest_path.

В любом случае, чтобы увидеть это?Удар это мой код

import networkx as nx
import matplotlib.pyplot as plt

G=nx.MultiGraph()
G.add_node("A")
G.add_node("B")
G.add_edge("A","B",weight=10,wire='Red')
G.add_edge("A","B",weight=12,wire='Blue')
G.add_edge("C","B",weight=3)

pos = nx.spring_layout(G)
nx.draw(G, pos)

plt.show()

nx.shortest_path(G,'A','C')

В идеале я хочу, чтобы это масштабировалось.Прямо сейчас у меня есть реализация, которая сравнивает взвешенные графы с одним и тем же базовым графом, но все узлы имеют только одно ребро между ними.Я поменяю вес на одном ребре, а затем вывожу все пути, которые изменились между исходным и новым графиками.

Я хочу иметь возможность добавлять несколько ребер между узлами, изменять вес и видеть,из узла B-> C потребовался синий или красный провод.

1 Ответ

0 голосов
/ 08 октября 2018

Мне нравится это

h = G.subgraph(nx.shortest_path(G,'A','C'))
h.edges(data=True)
[('B', 'C', {'weight': 3}),
 ('B', 'A', {'weight': 10, 'wire': 'Red'}),
 ('B', 'A', {'weight': 12, 'wire': 'Blue'})]

edge_color = nx.get_node_attributes(h,'wire') 
nx.draw_networkx(h, edge_color=[d['wire'] for _,_, d in h.edges(data=True)])
plt.show()

enter image description here

Я получаю «синий», но я так думаю, потому что «синий» был вторым и «на вершине красного ».Если вы добавите первый синий, вы получите красный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...