본문 바로가기
PS/Algorithm

플로이드-와샬

by 이지이즤 2022. 5. 27.
728x90

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

 

11404번: 플로이드

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

www.acmicpc.net

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <climits>

using namespace std;
const int MAX_V=101;
int dist[MAX_V][MAX_V];
int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int n,m,x,y,z;
    cin>>n>>m;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            dist[i][j]=INT_MAX;
        }
    }
    for(int i=0; i<m; i++){
        cin>>x>>y>>z;
        if(dist[x][y]>z)
            dist[x][y]=z;
    }

    for(int k=1; k<=n; k++){
        for(int i=1; i<=n; i++){
            for(int j=1; j<=n; j++){
                if(dist[i][k]!=INT_MAX && dist[k][j]!=INT_MAX)
                    dist[i][j]=min(dist[i][j], dist[i][k]+dist[k][j]);
            }
        }
    }

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

댓글