Post

플로이드-와샬 알고리즘 [Floyd-Warshall Algorithim]

Floyd-Warshall



Link
11404번 : 플로이드

image


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
int dp[100][100];
const int INF = 1e9;

int main(){
    int N, M; cin >> N >> M;
    for(int i=0; i<N; ++i){
        for(int j=0; j<M; ++j){
            dp[i][j] = INF;
        }
        dp[i][i] = 0;
    }
    // 초기화 : 자기 자신은 0, 나머지는 INF(무한)
    
    
    // 입력단계에서 dp[i][j] : i에서 j까지의 거리
    for(int i=0; i<M; ++i){
        int u, v, w; cin >> u >> v >> w;
        u--, v--;
        dp[u][v] = min(dp[u][v], w);
    }

    for(int k=0; k<N; ++k){
        for(int i=0; i<N; ++i){
            for(int j=0; j<N; ++j){
                dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
            }
        }
    }
    // dp갱신 후 dp[i][j] : i에서 j까지의 최단거리

    for(int i=0; i<N; ++i){
        for(int j=0; j<N; ++j){
            if(dp[i][j] == INF) cout << 0 << ' ';
            else cout << dp[i][j] << ' ';
        }
        cout << '\n';
    }
}






This post is licensed under CC BY 4.0 by the author.