플로이드 와샬(Floyd Warshall) 알고리즘에 대해 공부하고 백준의 "플로이드"문제(11404)를 해결한다.
Posted by
Seoyoung Lee
on July 22, 2020 ·
3 mins read
플로이드와샬 알고리즘 (Floyd Warshall)
최단거리를 구하는 알고리즘이지만, BFS가 한 정점에서부터 모든 정점으로의 최단거리라면 플로이드와샬은 그래프에서 모든 정점 사이의 최단거리를 구하는 것이 가능하다. 그래프의 간선들 중 음의 가중치가 존재해도 실행된다. 시간 복잡도는 3중 for문으로 인한 O(V^3)을 가진다. 많은 시간이 소요되지만 이 알고리즘을 이용해야하는 상황이 존재한다.
플로이드 와샬의 기본 개념은 i에서 출발해 j로 가는 경로의 가중치를 저장하는 2차원 배열을 채우는데, i를 출발해 j로 바로 가는 것보다 k를 거쳐 j로 가는 게 효율적일 경우(저렴할 경우) 해당 값을 갱신해준다. k의 값을 가장 바깥 for문에서 반복해주므로 하나의 경유지 k만 거치는 것뿐만 아니라 여러 경유지를 거치는 경로또한 포함한다.