최단 경로 문제
다익스트라 알고리즘
All-Pairs Shortest Paths
- 모든 쌍에 대하여 최단 경로 구하는 알고리즘
증명 방법
- 다익스트라 알고리즘을 n번 호출(음의 가중치X)
- O(VElogV)
- Bellman-Ford 알고리즘을 n번 호출
- O(V(VE))
- Floyd-Warshall 알고리즘 사용
- O(V(V(V)))
- 수도코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// D: 최단거리를 저장할 그래프, 모든 값을 무한대(최댓값)으로 설정 // W: 각 간선의 가중치 // M: 경로 기억할 그래프, 모든 성분 null로 초기화 for i from 1 to |V| D[i][i] := 0 for j from 1 to |V| D[i][j] := W[i][j] for k from 1 to |V| for i from 1 to |V| for j from 1 to |V| if D[i][j] > D[i][j] + D[k][j] D[i][j] = D[i][k] + D[k][j] M[i][j] = k // 경로 기억