최단 경로, 다익스트라, 벨만-포드, 플로이드-워셜

·
알고리즘/이론
가중치가 전부 같으면 BFS 가 최단 경로다. 가중치가 달라지는 순간 그 보장이 깨지고, 그때 꺼내는 이름이 셋이다 — 다익스트라, 벨만-포드, 플로이드-워셜. 이름이 셋이라 알고리즘도 셋인 것처럼 보이는데, 코드를 놓고 보면 세 개가 전부 같은 한 줄을 돌린다.if dist[u] + w u 까지 온 거리에 간선 하나를 붙이면 v 가 더 가까워지는가. 그렇다면 v 의 거리를 줄인다. 이것을 완화(relax) 라 부르고, 세 알고리즘의 차이는 어떤 간선을 어떤 순서로 완화하느냐 뿐이다. 가장 가까운 정점부터(다익스트라), 모든 간선을 V-1 번(벨만-포드), 경유 정점을 하나씩 늘리며 모든 쌍(플로이드-워셜). 그 순서의 차이가 음수 가중치를 견디는지, 모든 쌍을 구하는지, 파이썬에서 어디서 무너지는지를 ..