알고리즘
플로이드 워셜 알고리즘(자바)
leeeehhjj
2022. 7. 11. 16:22
다익스트라 알고리즘과 같이 한 노선에서 다른 노선으로 가는 최단 거리를 구하는 알고리즘이다.
다익스트라 알고리즘은 한 노드에서 다른 모든 노드까지의 최단 거리를 구하는 알고리즘이라면
플로이드 워셜 알고리즘은 모든 노드쌍들의 최단 거리를 구하는 알고리즘이다.
** 플로이드 워셜 알고리즘은 음의 간선이 있는 경우에도 사용 가능하다.
for (int k = 0; k < n; k++) { //모든 노드를 한 번씩 중간 노드로 놓고 거리를 갱신
for(int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
k는 경유지, i는 시작, j 는 도착지이다.
예를 들어 1 -> 2 -> 3 이 1번에서 3번으로 가는 최단 거리로 갱신되었다고 하자.
그럼 5 -> 1 -> 3 경로를 생각할 때 이미 1 -> 3 으로 가는 경로는 1 -> 2 -> 3으로 갱신되어 있기 때문에
5 -> 1 -> 2 -> 3 경로를 탐색한 것과 마찬가지이다.
즉, k값을 증가시켜주며 모든 노드를 한 번씩 중간에 놓아주면 모든 경로를 탐색할 수 있고,
따라서 모든 노드에 대해 최단 거리를 구할 수 있다.
참고
[알고리즘] 플로이드 워셜 알고리즘 (Floyd Warshall Algorithm) (tistory.com)
[알고리즘] 플로이드 워셜 알고리즘 (Floyd Warshall Algorithm)
[알고리즘] 플로이드 워셜 알고리즘 (Floyd Warshall Algorithm) 플로이드 워셜 알고리즘은 edge에서 edge로 이동할 때 최소비용을 구하는 알고리즘이다. 모든 경로의 최소비용을 구할 수 있다. 구현
komas.tistory.com