벨만-포드 예제 - 1
문제 분석
시작점 및 다른 노드와 관련된 최단 거리를 구하는 문제지만, 특이한 점은 에지에 해당하는 이동하는 시간이 양수가 아닌 경우가 가능하다는 것이다.
이렇게 시작점에서 다른 노드와 관련된 최단 거리를 구하는데 에지가 음수가 가능할 때는 벨만-포드 알고리즘을 사용할 수 있다.
손으로 풀어보기
에지 리스트에 에지 데이터를 저장한 후 거리 리스트를 초기화한다. 최초 시작점에 해당하는 거리 리스트값은 0으로 초기화한다.

다음 순서에 따라 벨만-포드 알고리즘을 수행한다.
벨만-포드 알고리즘 수행 과정
모든 에지와 관련된 정보를 가져온 후 다음 조건에 따라 거리 리스트의 값을 업데이트한다.
출발 노드가 방문한 적이 없는 노드일 때 값을 업데이트하지 않는다.
출발 노드의 거리 리스트값 + 에지 가중치 < 종료 노드의 거리 리스트값일 때 종료 노드의 거리 리스트값을 업데이트한다.
노드 개수 - 1만큼 과정 1을 반복한다.음수 사이클 유무를 알기 위해 모든 에지에 관해 다시 한번 과정1을 수행한다. 이때 한번이라도 값이 업데이트되면 음수 사이클이 존재한다고 판단한다.

음수 사이클이 존재하면 -1, 존재하지 않으면 거리 리스트의 값을 출력한다. 단, 거리 리스트의 값이 무한일 경우에는 -1을 출력한다.

슈도코드
코드 구현 - 파이썬
코드 구현 - 자바
Last updated