출처 : 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 |