저도 작성자님의 질문글을 보고 궁금해서 찾아봤는데요. 아래 링크를 참고하니 이해가 잘 됐습니다.
https://kangworld.tistory.com/...
다익스트라는 그리디 알고리즘으로 최단거리를 구하는 알고리즘인데, 핵심 아이디어는 최단 거리에 최단 거리를 더해서 최종 거리를 구합니다.
근데 작성자님의 말씀대로면 최단 거리에 최단 거리를 더한게 아니게 되므로 아이디어가 깨지게 된다네요.
근데 구현방식에 따라 최단거리를 구할 수도 있다는건 첨 알았네요ㅎㅎ
hellowfriend 1년 전 1
아래 코드는 다익스트라 알고리즘입니다.
다익스트라 알고리즘은 음수 간선이 있으면 사용하지 못한다고 보통 설명되있던데,
음수 간선은 되고 음수 순환이 안되는 것 아닌가요?
예를 들어서,
A -> B, cost: 1
A -> C, cost: 10
C -> B, cost: -100
인 그래프가 있을 때,
다익스트라 알고리즘을 실행하면
먼저, 시작점이 A 노드에 대해서 처리하니까
dist[B] = 1, dist[C] = 10이 되고,
우선순위 큐에 (1, B), (10, C) 순으로 정렬이 되고,
이후 (1, B)가 우선순위 큐에 빠져나오고 인접 노드가 없으니,
우선순위큐에 (10, C)가 남고,
이후 (10, C)가 우선순위 큐에서 빠져나오면서 C의 인접 노드 B에 대해서 처리하면서,
dist[C] + (-100) < dist[B]이므로, dist[B]는 -90으로 갱신.
따라서, dist[A] = 0, dist[B] = -90, dist[C] = 10으로 음수 간선이 존재할 때도 사용할 수 있는 것처럼 보여서 혼란스럽네요.