플로이드-워셜 예제 - 1

문제 분석

  • 모든 도시에 쌍과 관련된 최솟값을 찾아야하는 문제이다.

  • 그래프에서 시작점을 지정하지 않고, 모든 노드와 관련된 최소 경로를 구하는 알고리즘이 바로 플로이드-워셜 알고리즘이다.

  • 도시의 최대 개수가 100개로 매우 작은 편이므로 O(N^3) 시간 복잡도의 플로이드-워셜 알고리즘으로 해결할 수 있다.

손으로 풀어보기

  1. 버스 비용 정보를 인접 행렬에 저장한다. 먼저 인접 행렬을 초기화하는데, 연결 도시가 같으면(i==j)0, 아니면 충분히 큰 수로 값을 초기화하면 된다. 그리고 주어진 버스 비용 데이터값을 인접 행렬에 저장한다.

img_4.png
  1. 플로이드-워셜 알고리즘을 수행한다. 점화식을 활용한 3중 for 문으로 모든 중간 경로를 탐색한다.

img_5.png
  1. 알고리즘으로 변경된 인접 행렬을 출력한다. 인접 행렬 자체가 모든 쌍의 최단 경로를 나타내는 정답 리스트이다.

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated