목차
반응형
플로이드-워셜 알고리즘
플로이드-워셜 알고리즘은 최단 거리를 구할 때 사용하는 알고리즘이다.
벨만-포드 알고리즘과 같이 음수 가중치를 가지는 노드가 있어도 사용가능하다. 하지만 벨만-포드 알고리즘보다 더 큰 시간 복잡도를 가진다.
플로이드-워셜 알고리즘의 핵심 원리는 전체 경로의 최단 경로는 부분 경로의 최단 경로의 조합이라는 것이다.
파이썬으로 플로이드-워셜 알고리즘 구현하기
1. 최단 거리를 저장할 2차원 리스트 선언
출발 노드와 도착 노드가 같은 경우는 0으로 초기화하고 기본은 시스템 최댓값으로 초기화한다.
dist=[[sys.maxsize]*(n+1) for _ in range(n+1)]
for i in range(1, n+1):
dist[i][i]=0
2. 주어진 그래프 값 저장
1에서 선언한 2차원 리스트에 그래프 값을 저장한다.
for _ in range(m):
a, b, c=map(int, sys.stdin.readline().split())
dist[a][b]=c
3. 최단 거리 리스트 업데이트
플로이드-워셜 알고리즘의 핵심 원리인 전체 경로의 최단 경로는 부분 경로의 최단 경로의 조합이라는 것을 이용해 최단 거리 리스트를 업데이트한다. 3중 for문을 사용해서 해당 부분을 구현한다. 경유지 k, 출발지 s, 도착지 e 순으로 반복한다.
for k in range(1, n+1):
for s in range(1, n+1):
for e in range(1, n+1):
dist[s][e]=min(dist[s][e], dist[s][k]+dist[k][e])
플로이드-워셜 알고리즘을 활용한 문제
참고한 책 : Do it! 알고리즘 코딩테스트 파이썬편
반응형
'Study > Algorithm' 카테고리의 다른 글
[백준] #7576. 토마토 (python) - bfs 파이썬 풀이 (0) | 2024.04.20 |
---|---|
[백준] #1926. 그림 (python) - bfs 풀이 (0) | 2024.04.20 |
[백준] #1976. 여행 가자 (python) (0) | 2022.12.16 |
[Algorithm] 유니온 파인드(Union-Find) 알고리즘 (python) (0) | 2022.12.15 |
[Python] 최단 경로 - 다익스트라 알고리즘(Dijkstra's algorithm) (0) | 2022.03.28 |