플로이드 워셜 알고리즘 (Floyd-Warshall Algorithm)이란?

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2Fd614e241-9cf9-4199-930e-aee481f6e205%2Fimage.png

지난 포스팅에서는 다익스트라 알고리즘에 대해 작성했었다. 다익스트라의 경우 한 지점에서 다른 특정 지점까지의 최단 경로를 구하는 알고리즘이다. 그러나 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야하는 경우에는 어떻게 해야할까?

바로 플로이드 워셜 알고리즘을 사용하면 된다. 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구하는 알고리즘이다. 아래 정리한 내용을 살펴보면 이해하는데 도움이 될 것이다.

플로이드 워셜 알고리즘의 점화식은 아래와 같다.

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2Fd6125648-9e22-462b-a960-a8c3ad608700%2Fimage.png

플로이드 워셜 알고리즘 그림으로 보기

[step 0] 그래프의 노드와 간선에 따라 최단 거리 테이블을 갱신한다.

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2Fb2527075-ab4b-4262-bb1b-9da3a1700d67%2Fimage.png

[step 1] 1번 노드를 거쳐 가는 경우를 고려하여 테이블을 갱신한다.

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2F74dd3818-e77a-4f32-a9e1-81eddf16ca51%2Fimage.png

[step 2] 2번 노드를 거쳐 가는 경우를 고려하여 테이블을 갱신한다.

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2Fb16415c4-5b86-445c-9caf-db17ff91334c%2Fimage.png

[step ~] 3번, 4번, ... 노드를 거쳐 가는 경우를 고려하여 테이블을 갱신한다.

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2Fcf410823-eea7-47d1-9db8-c6c071302b96%2Fimage.png

https://velog.velcdn.com/images%2Fkimdukbae%2Fpost%2Fbff4b090-0ba8-49fe-80d0-db1deeec018a%2Fimage.png