다익스트라 알고리즘을 잘 생각해보시면 구현 방법이 가까운 곳 부터 visit해서 거리를 확정시켜나갑니다.
heapq는 프라이어리티 큐여서 작은 원소를(min heap에서는) pop 시킵니다.
이때 리스트,튜플 같은 자료형에서 (a,b,c) (d,e,f) 두 원소 비교(리스트라면 () 대신 [])는 사전순입니다.
무슨 말인가 하면 앞에서부터 하나씩 비교해서 먼저 큰 원소가 나오는 쪽이 크다는 것입니다.
예를 들어 (0,5,7) (0,10,-10) 이면 제일 앞에 있는 수는 둘 다 0으로 같으므로 다음 수를 보게 됩니다.
다음 수는 5와 10이고 5<10 이므로 더이상 뒤에 있는 수를 보지 않고 (0,5,7) < (0,10,-10) 이라고 판단하게 됩니다.
지금 코스트와 노드번호를 바꾸는건 크게 달라보이지 않을 수 있지만
하나는 거리 순대로 pop되게 하여 다익스트라 알고리즘이고, 다른 하나는 다익스트라가 아닌 이상한 알고리즘이 됩니다.
따라서 하나는 시간초과가 뜨지 않은것이고 다른 하나는 시간초과가 난 것입니다.
wofhdjxor 3년 전
위에 코드와 밑에 코드는 heappush의 인자랑 point, dis = heapq.heappop(heap) 여기서 변수 받는 위치만 바꿨는데 왜 하나는 시간초과가 나는건가요?