기술 블로그

11404번 플로이드 본문

알고리즘 문제/BOJ

11404번 플로이드

parkit 2020. 3. 12. 09:39
728x90
반응형

https://www.acmicpc.net/problem/11404


백준 boj 플로이드 와샬 최단거리


36, 50번 째 줄 주석문만 참고.




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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<bits/stdc++.h>
 
using namespace std;
 
#define Max 111
#define INF 2e9
 
int fw[Max][Max], n, m;
 
int main()
{
    cin.tie(0);
    scanf("%d %d"&n, &m);
 
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            fw[i][j] = i == j ? 0 : INF;
        }
    }
 
    int f, t, c;
    for (int i = 0; i < m; i++) {
        scanf("%d %d %d"&f, &t, &c);
        if (fw[f][t] == INF) {
            fw[f][t] = c;
        }
        else {
            fw[f][t] = min(fw[f][t], c);
        }
    }
    
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                /*
                i → k 또는 k → j 버스 노선이 없는 경우도 무시해야 한다.
                */
                if (i == j || fw[i][k] == INF || fw[k][j] == INF) {
                    continue;
                }
                if (fw[i][j] > fw[i][k] + fw[k][j]) {
                    fw[i][j] = fw[i][k] + fw[k][j];
                }
            }
        }
    }
 
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            // i → j 못 가는 경우는 0 출력.
            printf("%d ", fw[i][j] == INF ? 0 : fw[i][j]);
        }
        printf("\n");
    }
 
    return 0;
}
cs






728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

1981번 배열에서 이동  (0) 2020.03.13
1508번 레이스  (0) 2020.03.13
5618번 공약수  (0) 2020.03.11
2261번 가장 가까운 두 점  (0) 2020.03.11
12018번 Yonsei TOTO  (0) 2020.03.11