map에 (v1,v2)간선이 없으면 다익스트라 우선순위 큐에 추가하는 조건이 약할 수 있습니다.
예)
5 4
1 2 10
2 3 10
3 4 10
4 5 10
2 4
위 예제의 경우 top.node==v1 && arrival.node==v2인 경우가 발생하지 않습니다. (역방향도 마찬가지입니다.) 따라서 -1을 출력하게 될겁니다. 실제 답은 4입니다.
v1, v2를 통과하지 않는 최단거리, v1만 통과하고 v2를 통과지 않는 최단거리, v2만 통과하고 v1을 통과하지 않는 최단거리, v1, v2를 모두 통과하는 최단거리를 구하는 방법이 있을텐데, 이 경우는 다익스트라를 여러 번 진행하는 것보다 느립니다.
lifecream 2년 전
www.acmicpc.net/problem/16118
16118: 달빛 여우 문제에서와 같이
(v1, v2) edge 를 지났을 경우와 지나지 않았을 경우 두가지로 visited 2차원 배열을 구성했습니다.
1 -> v1 -> v2 -> N 이나
1 -> v2 -> v1 -> N 과 같이 다익스트라를 여러번 진행하는 것 이외에
아래 코드와 같이 DP를 사용하여 한번에 다익스트라를 진행하는 방법이 없을까요?