알고리즘을 거의 처음 시작할 때 만든 코드라 부끄럽네요.
inum은 힙 내에서 해당 정점 번호가 저장된 인덱스가 어딘지를 기억하기 위한 배열이고, 이를 통해서 힙에 중복된 정점을 삽입하는 일 없이 기존 지점에서 최단 거리가 변할 때마다 그에 맞게 위쪽으로 이동시킬 수 있게 됩니다. 중복된 정점이 힙에 들어갈 수 있게 구현하는 경우 시간 복잡도가 ElogV가 되는데, 이 방법을 사용하면 VlogV로 줄일 수 있게 됩니다.
해당 구현체는 힙에 정점 번호만을 넣고 거리를 비교할 때는 w라는 배열을 통해 우선순위를 정하는데, 시작 정점과 연결된 정점들에 대한 링크드 리스트를 순회하면서 거리를 갱신하고 아직 힙에 넣지 않은 정점들을 넣어주는 부분입니다. 사실 그 부분에서 실수가 있어서 힙 구조가 유지되지 않게 되는 경우가 존재하기는 하는데... 저격이 가능한지는 모르겠네요.
cdt416z 4년 전
@djm03178님 갑작스럽게 언급드려서 죄송합니다.. 다익스트라와 우선순위 큐에 대해서 공부중인데 6399890번 소스코드를 보고 이해가 안되서 혹시 짧게라도 시간을 내주실수 있으면 inum[] 함수의 역할과 86~94번째 줄에서 어떻게 서로 다른 두 점 사이의 여러 간선을 선택하는지에 대해서도 알려주실수 있나요..?