[적용한 알고리즘]
그래프, 플로이드-와샬
[아이디어]
플로이드는 음의 간선이 없는 사이클을 도는 것까지
dist[i][i] (i = 1~N) 까지 나타내므로..
[교훈]
플로이드 와샬 알고리즘은 사이클까지 나타내준다..? 정도?
<코드>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int MAX_V = 401;
const int INF = 1000000000;
int V, E;
int Dist[MAX_V][MAX_V];
int main(){
scanf("%d %d", &V, &E);
for (int i = 0; i < E; i++){
int from, to, cost;
scanf("%d %d %d", &from, &to, &cost);
Dist[from][to] = cost;
}
for (int i = 1; i <= V; i++){
for (int j = 1; j <= V; j++){
if (Dist[i][j] != 0) continue;
Dist[i][j] = INF;
}
}
for (int k = 1; k <= V; k++){
for (int i = 1; i <= V; i++){
for (int j = 1; j <= V; j++){
Dist[i][j] = min(Dist[i][j], Dist[i][k] + Dist[k][j]);
}
}
}
int ans = INF;
for (int i = 1; i <= V; i++){
ans = min(ans, Dist[i][i]);
}
printf("%d\n", ans == INF ? -1 : ans);
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 1854번 K번째 최단경로 찾기 (0) | 2020.02.01 |
---|---|
[백준] 1507번 궁금한 민호 (0) | 2020.02.01 |
[백준] 1412번 일방통행 (124) | 2020.02.01 |
[백준] 1922번 네트워크 연결 (0) | 2020.01.10 |
[백준] 2482번 색상환 (2) | 2020.01.10 |