일단은 플로이드로 푸는 것이 시간복잡도 상으로는 더 좋습니다. O(n^3)
하지만 각 정점마다의 다익스트라로도 풀 수 있습니다. O(V* ElogV)
위 코드에서 몇가지 잘못된 부분이 있습니다.
다익스트라의 구현 방식을 다시 보면 좋으실 거 같은데,
1. 25번 째 줄에서 if (arr[start][next] >= sum) 로 수정되어야 합니다. sum과 같을 때에도 그 경로에 대해서는 업데이트를 해줘야 되기 때문입니다.
2. 사실 이것때문에 시간초과가 난 것인데 28 ~ 32번째 줄에서 아래 코드와 같이 수정되어야 합니다. 더 짧은 경로를 발견했을 때만 arr을 갱신해주고 우선순위 큐에 저장을 해야 우선순위 큐에 저장되는 간선 개수가 E개를 넘지 않을 것이기 때문입니다.
마지막으로
3. answer ==INF 일때는 -1을 출력해야 합니다.
fdsajklt2 4년 전
플로이드 와샬을 공부하기전인데요..
가중치가 자연수여서 다익스트라를 사용하면 풀리겠다 싶어서 풀었는데 시간초과가 떠서 질문드립니다..
혹시 제가 다익스트라를 잘못 구현한것인지 아니면 애초에 다익스트라로 풀면 안되는 문제인지 궁금하여 질문드립니다!