[실습] 최단경로
import networkx as nx
소설 "레미제라블"에서 등장인물의 네트워크를 불러온다. 에지는 같은 장면에 등장한 관계를 나타낸다.
G = nx.les_miserables_graph()
Napoleon
에서 Boulatruelle
까지 경로가 있는가?
nx.has_path(G, 'Napoleon', 'Jondrette')
True
Napoleon
에서 Boulatruelle
까지 최단 경로를 구한다.
path = nx.shortest_path(G, 'Napoleon', 'Jondrette')
path
['Napoleon', 'Myriel', 'Valjean', 'Gavroche', 'MmeBurgon', 'Jondrette']
시각화할 레이아웃을 만든다.
pos=nx.spring_layout(G)
경로에 포함된 에지는 빨간색으로 그렇지 않은 에지는 회색으로 설정한다.
edge_colors = ['red' if set(e) < set(path) else '#CCC' for e in G.edges()]
최단 경로를 시각화한다.
nx.draw(G, pos=pos, node_color='#CCC', edge_color=edge_colors)
result = nx.draw_networkx_labels(G, pos, labels={p: p for p in path}, font_color='red')