BOJ No.11404 [플로이드]
Floyd-Warshall Algorithm
Problem
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>
#include <vector>
using namespace std;
typedef unsigned long long ull;
int V, E;
const ull INF = ull(1e15);
vector<vector<ull>> floyd;
int main() {
cin >> V >> E;
floyd.assign(V + 1, vector<ull>(V + 1, INF));
for (int i = 1; i <= V; i++) floyd[i][i] = 0;
for (int i = 0; i < E; i++) {
ull s, e, cst;
cin >> s >> e >> cst;
floyd[s][e] = min(floyd[s][e], cst);
}
for (int visit = 1; visit <= V; visit++) {
for (int i = 1; i <= V; i++) {
for (int j = 1; j <= V; j++) {
if (i != visit && j != visit) {
floyd[i][j] = min(floyd[i][j], floyd[i][visit] + floyd[visit][j]);
}
}
}
}
for (int i = 1; i <= V; i++) {
for (int j = 1; j <= V; j++)
cout << (floyd[i][j] != INF ? floyd[i][j] : 0) << ' ';
cout << '\n';
}
}
|
cs |
How to solve
Floyd-Warshall Algorithm에 대해서 가장 기본적인 문제이다. 문제의 조건에서, 두 vertex 사이 edge가 여러개 있을 수 있다고 했으므로 #21 line 에선 floyd[ s ][ e ] 에 현재 floyd[ s ][ e ]의 값과 현재 입력된 값인 cst중 더 작은 값으로 floyd[ s ][ e ]를 갱신해 주었다.
Floyd-Warshall Algorithm를 참고하면 된다.
728x90
'Algorithm (C++ based) > BOJ' 카테고리의 다른 글
백준 No.17386 [선분 교차 1] (0) | 2021.06.28 |
---|---|
백준 No.7579 [앱] (0) | 2021.02.22 |
백준 No.11779 [최소비용 구하기2] (0) | 2021.02.19 |
백준 No.13913 [숨바꼭질4] (0) | 2021.02.16 |
백준 No.13549 [숨바꼭질3] (0) | 2021.02.16 |
댓글