yw9594   3년 전

하도 문제가 안풀려서 왜 틀렸는지 찾아보고 보완했음에도 불구하고 오류가 발생해 질문 드립니다.

위치 간 간선의 가중치가 다름을 고려해 우선 순위 큐를 사용해 해결했습니다.  

특히 순간이동과 걷기의 가중치가 다르므로 배열을 사용해 다음 이동해야할 위치 중 순간이동을 먼저 큐에 삽입해주었습니다.

암만 봐도 다른 문제를 통과하신 분들의 코드와 다른 점이 없는 것 같은데.. 무엇이 문제일까요?

djm03178   3년 전

이 코드는 기본적으로 다익스트라를 하고 있는 것이기 때문에, 50번째 줄처럼 큐에 삽입할 때 바로 방문 표시를 하면 안 됩니다. 특정 지점에 큐에서 더 늦게 나온 정점으로부터 도달하는 것이 더 빠를 수도 있기 때문입니다. 다익스트라에서는 큐에서 뺀 뒤에 방문 표시를 해야 합니다.

예를 들어 우선순위 큐에 7과 3이 같은 시간 x초에 들어가있고 7이 먼저 큐에서 빠졌다면 7이 먼저 6을 x+1초에 방문할 텐데 실제로는 더 나중에 나온 3으로부터 6에 도달하면 x초만에 갈 수 있게 됩니다.

djm03178   3년 전

그리고 이 코드가 다익스트라이기 때문에 44번째 줄의 주석과 같이 반드시 어떤 정점을 먼저 큐에 넣으려고 할 필요는 없습니다.

yw9594   3년 전

와.. 똑부러지는 설명 감사드립니다. 바로 이해했습니다..!!

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