1504번 - 특정한 최단 경로
반드시 거쳐야 하는 두 개의 정점을 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을 출력하도록 예외처리를 했습니다.
하지만 왜 틀릴까요...?
코드의 자세한 설명은 주석으로 달아놨습니다!
4 51 2 31 3 11 4 12 3 33 4 42 3
답 8
위의 반례를 직접 그려보시고 디버깅하시길 권장합니다.
우와! 감사합니다!
두서없이 작성한 코드 분석해주시고 문제점까지 발견해주시다니... ㅠㅠ
댓글을 작성하려면 로그인해야 합니다.
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을 출력하도록 예외처리를 했습니다.
하지만 왜 틀릴까요...?
코드의 자세한 설명은 주석으로 달아놨습니다!