-
[알고리즘] 플로이드-워셜 알고리즘개발/자료구조와 알고리즘 2022. 3. 24. 00:40
플로이드-워셜(Floyd-Warshall) 알고리즘
그래프의 모든 노드 간 최단 거리를 구하는 알고리즘이다.
시간 복잡도는 $O(n^3)$이므로 모든 최단 경로가 필요하지만 노드의 수가 적을 때 사용할 수 있다.
아이디어
한 노드(k)가 다른 두 노드(a, b)의 중간지점이라 생각한다면,
a에서 b로 가는 경로는 $a-k-b$ 이다. (k가 a혹은 b라면 경로는 a-b가 된다.)
$a-k-b$를 모두 조사한다면 a-b간 최단 경로를 알 수 있다.
아래와 같은 그래프를 가정하면
2를 중간 노드로 둘 경우, 2-2-3, 2-2-5, 3-2-5의 세 가지 경로의 값을 알 수 있다.
이 값들 중에서 3-2-5의 경우 3-5로 가는 경로보다 값이 작으므로 업데이트 해준다.
코드
for k in range(1, n+1): for a in range(1, n+1): for b in range(1, n+1): if board[a][b] > board[a][k]+board[k][b]: board[a][j] = board[a][k]+board[k][b]
관련 문제
코딩테스트 연습 - 합승 택시 요금
6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4
programmers.co.kr
'개발 > 자료구조와 알고리즘' 카테고리의 다른 글
[알고리즘] 이진 탐색 (0) 2022.03.04 [자료구조] 해시(Hash) (0) 2022.02.21 [자료구조] 그래프 (0) 2022.02.16 [자료구조] 힙(Heap) (0) 2022.02.05 [자료구조] 이진 탐색 트리(Binary Search Tree) (0) 2022.01.31