백준 11404 플로이드
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
// 25분
 
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
 
const int INF = 1000000000;
 
int main() {
    int n, m, dist[100][100];
    scanf("%d %d"&n, &m);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            dist[i][j] = (i == j ? 0 : INF);
    for (int i = 0; i < m; i++) {
        int a, b, c;
        scanf("%d %d %d"&a, &b, &c);
        dist[a - 1][b - 1= min(dist[a - 1][b - 1], c);
    }
    for (int k = 0; k < n; k++)
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (dist[i][j] == INF) dist[i][j] = 0;
            printf("%d ", dist[i][j]);
        }
        puts("");
    }
    return 0;
}
 
cs




처음으로 풀어 본 플로이드-와샬 알고리즘


주의할 점은 배열의 인덱스를 0부터 시작한다는 것과


27번줄의 if (dist[i][j] == INF) dist[i][j] = 0; 


 "만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력한다."


라는 조건을 놓치지 말 것.

'Algorithm' 카테고리의 다른 글

백준 1389 케빈 베이컨의 6단계 법칙  (0) 2018.05.17
백준 11403 경로 찾기  (0) 2018.05.17
백준 2468 안전 영역  (0) 2018.05.17
백준 11724 연결 요소의 개수  (0) 2018.05.17
백준 2667 단지번호붙이기  (0) 2018.05.17
더보기

댓글,

jayharvey

머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)