Recent Posts
Notice
No Rules Rules
플로이드 (feat. 백준, 11404번) 본문
728x90
반응형
플로이드
https://www.acmicpc.net/problem/11404
11404번: 플로이드
첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가
www.acmicpc.net
반응형
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <algorithm>
using namespace std;
int N, M;
int ans[101][101];
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
cin >> N >> M;
for (register int i = 1, j; i <= N; ++i)
for (j = 1; j <= N; ++j)
ans[i][j] = static_cast<int>(1e9);
for (register int i = 1; i <= N; ++i)
ans[i][i] = 0;
for (register int m = 0, x, y, c; m < M; ++m)
cin >> x >> y >> c, ans[x][y] = min(ans[x][y], c);
for (register int m = 1, f, t; m <= N; ++m) // mid
for (f = 1; f <= N; ++f) // from
for (t = 1; t <= N; ++t) // to
ans[f][t] = min(ans[f][t], ans[f][m] + ans[m][t]);
for (register int i = 1, j; i <= N; ++i) {
for (j = 1; j <= N; ++j)
if (ans[i][j] == static_cast<int>(1e9))
cout << "0 ";
else
cout << ans[i][j] << " ";
cout << "\n";
}
return 0;
}
// *&)*@*
- 2중 for문을 통해 구할 수 있는 문제입니다.
- 하지만 문제에서 요구하는 워셜 알고리즘을 사용하였습니다.
- 워셜 알고리즘은 A에서 B를 거친 뒤 C로 가는 그래프 탐색에 적합합니다. 3중 for문으로 정형화된 방식입니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
두 수의 합 (feat. 백준, 3273번) (0) | 2022.08.23 |
---|---|
운동 (feat. 백준, 1956번) (0) | 2022.08.23 |
최단경로 (feat. 백준, 1753번) (0) | 2022.08.22 |
이분 그래프 (feat. 백준, 1707번) (0) | 2022.08.22 |
벽 부수고 이동하기 (feat. 백준, 2206번) (0) | 2022.08.22 |
Comments