[BOJ] 플로이드
Date:
[BOJ] 플로이드
Problem URL : 플로이드
#include <iostream>
#include <algorithm>
#define INF 987654321
using namespace std;
int dist[101][101];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
fill(&dist[0][0], &dist[n][n], INF);
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
dist[a][b] = min(dist[a][b], c);
}
for (int i = 1; i <= n; i++) {
dist[i][i] = 0;
}
// for 문 순서에 주의하자
// 하나의 mid 포인트씩 중심으로 해서 최신화를 시켜야 한다.
// mid 값 for문이 안쪽에 있으면 순서에 따라 최신화가 불가능한 경우가 생긴다
for (int mid = 1; mid <= n; mid++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (dist[i][mid] != INF && dist[mid][j] != INF) {
dist[i][j] = min(dist[i][mid] + dist[mid][j], dist[i][j]);
}
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (dist[i][j] == INF) dist[i][j] = 0;
cout << dist[i][j] << " ";
}
cout << "\n";
}
return 0;
}
댓글