플로이드-워샬 알고리즘
시간복잡도 O(N^3)
정점에서 다른 정점까지 최단거리를 구하는 알고리즘.
다익스트라 알고리즘은 한 정점에서 다른 정점까지 최단거리를 구하는 알고리즘이라면
플로이드-워샬 알고리즘은 모든 정점을 다른정점과 최단거리를 구해주는 알고리즘이다.
방법
꼭지점 k를 중간 노드로 삼아서 모든 그래프가 k를 지나가는 방법과 바로가는 방법중 더 작은 값을 새로 등록한다.
위와같이 있을때 k가 3이라고 가정하면 1->4와 1->3->4로 나눠보고 더 작은값인 1->4의 4를 채택해서 새로 등록한다.
모든 k에 대해서 반복하고 모든 2차원 그래프를 탐색하니 O(N^3)의 시간복잡도가 된다.
코드
for k in range(N):
for i in range(N):
for j in range(N):
arr[i][j] = min(arr[i][j], arr[i][k] + arr[k][j])
참고한 사이트
https://chanhuiseok.github.io/posts/algo-50/
알고리즘 - 플로이드-워셜(Floyd-Warshall) 알고리즘
컴퓨터/IT/알고리즘 정리 블로그
chanhuiseok.github.io
https://www.acmicpc.net/problem/17182
17182번: 우주 탐사선
우주 탐사선 ana호는 어떤 행성계를 탐사하기 위해 발사된다. 모든 행성을 탐사하는데 걸리는 최소 시간을 계산하려 한다. 입력으로는 ana호가 탐색할 행성의 개수와 ana호가 발사되는 행성의 위
www.acmicpc.net
이 문제로 처음 접했다.
'백준 > 이론_python' 카테고리의 다른 글
문자열 뒤집기 python (0) | 2023.04.11 |
---|---|
나머지 분배법칙(모듈러 연산) (0) | 2023.02.11 |
백준의 long과 int의 차이 (0) | 2023.02.11 |
비트 마스킹 C++ (0) | 2023.01.17 |
분할 정복 알고리즘 python (0) | 2023.01.16 |
댓글