춤추는 개발자

[그래프] 벨만-포드 알고리즘 본문

Developer's_til/자료구조 & 알고리즘

[그래프] 벨만-포드 알고리즘

Heon_9u 2021. 3. 29. 17:48
728x90
반응형

벨만-포드 알고리즘

- 앞서 포스팅한 다익스트라와 유사한 최단경로 알고리즘입니다.

- 다익스트라와의 차이점은 가중치가 음수가 포함된 상황에서도 적용 가능하다는 특징입니다.

- 정점의 개수가 N이라면 시작 노드를 제외한 (N-1)회 반복문을 수행하여 최단 경로를 구할 수 있습니다. 

 

www.acmicpc.net/problem/11657

 

11657번: 타임머신

첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. 

www.acmicpc.net

 

public static void checkedTimeMachine() {
    minTime[1] = 0;

    for(int i=0; i<N-1; i++) {
        for(Bus bus: buses) {
            int s = bus.start;
            int e = bus.target;
            
            if(minTime[s] == MAX) continue;
            if(minTime[e] > minTime[s] + bus.time) {
                minTime[e] = minTime[s] + bus.time;
            }
        }
    }
}

 반복문을 왜 (N-1)회 반복하는지 궁금해 결과값을 출력하면서 확인해봤습니다. 해당 문제는 1번 노드에서 다른 노드까지 이동하는데 최소 시간을 구하는 문제이며, 반복문이 한번 돌 때마다 1번 노드로 부터 특정한 하나의 노드까지의 최소 비용이 계산됩니다. 즉, [반복문 1번 = 하나의 노드까지의 최소 비용]

728x90
반응형