Problem : 플로이드2
유형 : 플로이드 워셜
문제 해석
- 각 도시별 최단 거리를 찾아라.
문제 재해석
- 도시별로 이동하는 가중치가 있다.
- 음수인 가중치가 없다.
- 최단 거리를 찾는다.
해결 전략
- 플로이드 워셜 알고리즘을 통해 해결한다.
- 경로의 경우, 최단 거리가 갱신 되는 경우, 경로를 갱신해준다.
설계, 구현
-
table
을 만들어 둔다. - 아직 경로를 찾지 못한 경우는
최대 (10000 * 100)
가 될 수 있는1e7
로 초기화 해둔다. -
overflow
에 주의한다. - 자기 자신으로 가는 경우는
0
으로 해둔다. - 중간에 거치는
도시
가 있는 경우가 최소 거리가 될 수 있는지 매번 따져본다.
주의할 점
- 같은 방향의 간선이 여러개 일 수 있다.
디버깅
- 경로를 갱신할 때 실수를 했다.
-
A
에서Z
를 거친 후B
로 가는 것이 최소 비용일때 -
path[A][B] = Z
andpath[Z][B] = B
-
path[A][B] = path[A][Z]
코드
1 |
|
피드백
- 경로 추적시 실수를 다시 하지 않도록 주의 하자.