본문 바로가기

코딩 테스트/백준

백준 11404 플로이드

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


플로이드-워셜 알고리즘을 사용하는 기본문제

#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    int n, m, a, b, c;
    cin >> n >> m;
    int maxDist = 100000*(n-1)+1;
    vector<vector<int>> dist(n+1, vector<int>(n+1, maxDist));
    for(int i=1; i<=n; i++)
        dist[i][i] = 0;
    for(int i=0; i<m; i++){
        cin >> a >> b >> c;
        if(dist[a][b] > c)
            dist[a][b]=c;
    }
    
    // 플로이드-워셜
    for(int k=1; k<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(dist[i][j] > dist[i][k] + dist[k][j])
                    dist[i][j] = dist[i][k] + dist[k][j];


    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if(dist[i][j]>=maxDist) cout << "0 ";
            else cout << dist[i][j] << ' ';
        }
        cout << '\n';
    }
    
    return 0;
}

 

초기값에 INT_MAX 사용시 오버플로우 우려가 있어 주어진 조건에서의 최대값을 따로 지정하였다.

 

"시작 도시와 도착 도시를 연결하는 노선은 하나가 아닐 수 있다." 라는 설명에 주의하여 입력시 값을 비교한다.

'코딩 테스트 > 백준' 카테고리의 다른 글

백준 1967번 트리의 지름  (0) 2024.10.29
백준 30804번 과일 탕후루  (0) 2024.10.29
백준 16928번 뱀과 사다리 게임  (0) 2024.10.28
백준 1197번 최소 스패닝 트리  (0) 2024.09.21
백준 2467번 용액  (0) 2024.09.21