Algorithm

[백준] 플로이드 11404번 (c++)

salmon16 2022. 7. 11. 15:06

출처 : 11404번: 플로이드 (acmicpc.net)

 

11404번: 플로이드

첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가

www.acmicpc.net

풀이 방법

플로이드 와샬 알고리즘을 사용하면 된다.

#include <bits/stdc++.h>
using namespace std;

int INF = 987654321;
int n, m, s, e, w;
int edge[101][101];

void floyd() {
    for (int i = 1;i <= n;i++) { // 거쳐 가는 노드
        for (int j = 1;j <= n;j++) { // 시작 노드
            for (int k = 1;k <= n;k++) { // 도착 노드
                edge[j][k] = min(edge[j][k], edge[j][i] + edge[i][k]);
            }
        }
    }
}

int main() {
    cin >> n >> m;
    for (int i = 1;i <= n;i++) { // 최댓값으로 초기화
        for (int k = 1;k <= n;k++) {
            edge[i][k] = INF;
        }
    }
    for (int i = 0;i < m;i++) {
        cin >> s >> e >> w;
        if (edge[s][e] > w) {
            edge[s][e] = w;
        }
    }
    floyd();
    for (int i = 1;i <= n;i++) {
        for (int j = 1;j <= n;j++) {
            if (edge[i][j] >= INF || i == j) {
                cout << 0 << " ";
            }
            else {
                cout << edge[i][j] << " ";
            }
        }
        cout << endl;
    }
    return 0;
}

'Algorithm' 카테고리의 다른 글

[백준] 계단오르기 2579번 (c++)  (0) 2022.07.21
[백준] N-Queen 9663번 (c++)  (0) 2022.07.15
[백준] 다리 만들기 2146번 (c++)  (0) 2022.07.07
[백준] 빙산 2573번 (c++)  (0) 2022.07.04
[백준] 숨바꼭질 3 (c++)  (0) 2022.06.16