문제

문제 링크

어떻게 접근할 것인가

  • 이 문제는 모든 도시에서 모든 도시까지의 거리를 구하는 문제이다.
  • 플로이드 와샬 알고리즘을 이용해서 풀었다.

코드

#include <cstdio>
#define INF 987654321
using namespace std;

int main(){
    long long d[101][101];
    int n, m, u, v, w;
    scanf("%d %d", &n, &m);
    for(int i = 0; i < n + 1; i++){
        for(int j = 0; j < n + 1; j++)d[i][j] = INF;
        d[i][i] = 0;
    }
    while(m--){
        scanf("%d %d %d", &u, &v, &w);
        if(d[u][v] > w)d[u][v] = w;
    }
    for(int k = 1; k < n + 1; k++){
        for(int i = 1; i < n + 1; i++){
            for(int j = 1; j < n + 1; j++){
                if(d[i][j] > d[i][k] + d[k][j])d[i][j] = d[i][k] + d[k][j];
            }
        }
    }

    for(int i = 1; i < n + 1; i++){
        for(int j = 1; j < n + 1; j++){
            if(d[i][j] == INF)printf("0 ");
            else printf("%lld ", d[i][j]);
        }
        printf("\n");
    }
}

느낀점

  • 플로이드는 쉽지~!