[실습] 최단경로 :: Python 네트워크 분석 - mindscale
Skip to content

[실습] 최단경로

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