[C++]플로이드-와샬 알고리즘(Floyd-Warshall Algorithm)
Contents
플로이드-와샬 알고리즘(Floyd-Warshall Algorithm)
플로이드-와샬 알고리즘(Floyd-Warshall Algorithm)
한번의 실행으로 “모든 노드” 간 최단 경로를 구하는 알고리즘.
시간복잡도
$$ O(n^3) $$
위 그림의 초기값은 다음과 같다.
0 | 5 | ∞ | 9 | 1 |
---|---|---|---|---|
5 | 0 | 2 | ∞ | ∞ |
∞ | 2 | 0 | 7 | ∞ |
9 | ∞ | 7 | 0 | 2 |
1 | ∞ | ∞ | 2 | 0 |
이때,
1 번 노드를 중간 노드로 한다면,
2 - 1 - 4 로 가는 길이 14 짜리 경로를 만들 수 있고,
2 - 1 - 5 로 가는 길이 6 짜리 경로를 만들 수 있다.
0 | 5 | ∞ | 9 | 1 |
---|---|---|---|---|
5 | 0 | 2 | 14 |
6 |
∞ | 2 | 0 | 7 | ∞ |
9 | 14 |
7 | 0 | 2 |
1 | 6 |
∞ | 2 | 0 |
위와 같은 방식으로 모든 노드가 중간노드로 선택될 때까지 반복한다.
이때 반복이 종료된다면, 모든 노드간 최단거리가 들어있게 된다.
0 | 5 | 7 | 3 | 1 |
---|---|---|---|---|
5 | 0 | 2 | 8 | 6 |
7 | 2 | 0 | 7 | 8 |
3 | 8 | 7 | 0 | 2 |
1 | 6 | 8 | 2 | 0 |
코드
|
|