kim031504   4년 전

반드시 거쳐야 하는 두 개의 정점을 v1, v2라 놓으면

1. start(시작점) -> v1 -> v2 -> end(끝점)

2.  start(시작점) -> v2 -> v1 -> end(끝점)

의 두 가지 경우가 나옵니다.

만일 1번의 경우

start -> v1의 다익스트라 적용

v1 -> v2의 다익스트라 적용

v2 -> end의 다익스트라 적용

이렇게 해서 3가지의 값을 더하는 식으로 하고, 2번의 경우도 마찬가지의 프로세스를 따르게 했습니다.

이들 각각의 결과는 case1과 case2라는 변수에 담아 최종적으로 min인 값을 출력하게요!

그리고 갱신이 안 되어 INF(가장 큰 값)이 된 경우에는 -1을 출력하도록 예외처리를 했습니다.

하지만 왜 틀릴까요...? 

코드의 자세한 설명은 주석으로 달아놨습니다!

ha_ram   4년 전

4 5
1 2 3
1 3 1
1 4 1
2 3 3
3 4 4
2 3

답 8

위의 반례를 직접 그려보시고 디버깅하시길 권장합니다.

kim031504   4년 전

우와! 감사합니다! 

두서없이 작성한 코드 분석해주시고 문제점까지 발견해주시다니... ㅠㅠ 

댓글을 작성하려면 로그인해야 합니다.