방문 유무가 아니라 디스턴스의 대소로로 컨틴뉴를 결정해요
1753번 - 최단경로
아.. 윗분 말씀이 맞습니다. 너비우선 탐색하고 해깔렸네요.. 죄송합니다. 잘못된 답변은 지우겠습니다..
두분 모두 답변 감사합니다. 그런데 아직 이해가 잘 되지 않는게, 다익스트라가 현재 선택되지 않은 정점 중 최소값을 가진 정점을 선택해서 그 정점과 연결된 모든 정점과의 거리를 갱신하는것인데, 거리를 갱신할때마다 PQ에 값이 들어가게 되고, 뽑아낼 때 그 값이 이미 visit 됐는지 아닌지를 체크하면 되는것 아닌지요? 대소라 하면 어떤것과의 대소를 말씀하시는것인지요?
우선 지금 코드는
0. 첫번째 시작정점을 우선순위 큐에 넣는다. 시작 정점 방문체크함
1. 정점의 수만큼 루프를 돌린다.
2. 우선 순위 큐에서 시작 정점의 값을 꺼낸다.
3. 시작정점이 방문된 상태이므로 루프를 빠져나온다.
4. 종료.
이렇게 되있는 것 같아요..
코드 파악하기가 힘들었지만...
고생해서 고쳐봤습니다.
생각보다 고칠 부분이 없더라구요..
변경점 :
1. while 문을 if 문으로 고침
수정전 while문에서 pq의 모든 노드를 제거해버리고 마지막 노드만 취하게 됩니다...
2. 정점의 개수만큼 반복하지 않고 간선의 개수 만큼 반복하도록 수정했습니다.
정점의 개수만큼만 돌면 모든 간선을 확인하지 못하므로 간선의 수만큼 돌렸습니다.
두분다 답변 너무 열심히 해주셔서.. 감사합니다 !
말씀해주신것 다시 한번 생각해보면서 풀어보겠습니다 ㅜㅜ
댓글을 작성하려면 로그인해야 합니다.
orange4glace 8년 전
노드를 방문해서 거리를 갱신할때마다 pq에 노드를 넣어주고
pq에서 pop 할 때 해당 노드가 이미 방문된 노드면 continue 하도록 구현했습니다.
어디가 잘못된건지요?
지적부탁드립니다.