플로이드 워셜 알고리즘은 시간 복잡도와 공간 복잡도가 높지만 간단한 구현력과 음의 가중치를 포함할 수 있어서 좋다
원리는 은근 쉽다
a -> b 로 가는길 보다 a -> c -> b 의 경로가 더 짧다면 그 경로를 선택하는 것이다
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main() {
vector<vector<long long>> floyd(200, vector<long long>(200, INT_MAX));
int n, m;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for(int i = 0; i < m; i++) {
long long x, y, z;
cin >> x >> y >> z;
floyd[x][y] = min(floyd[x][y], z);
}
for(int i = 1; i <= n; i++) {
floyd[i][i] = 0;
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
for(int k = 1; k <= n; k++) {
floyd[j][k] = min(floyd[j][k], floyd[j][i] + floyd[i][k]);
}
}
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(floyd[i][j] == INT_MAX) {
cout << "0 ";
continue;
}
cout << floyd[i][j] << " ";
}
cout << endl;
}
}
'개발 > 알고리즘' 카테고리의 다른 글
백준 회의준비) 골드 2 2610 플로이드 워셜 (0) | 2024.12.04 |
---|---|
백준 2660 플로이드 워셜 ) 골드5 - 회장뽑기 (0) | 2024.12.03 |
mysql-connector-cpp in C++ 라이브러리 형변환 문제 (1) | 2024.11.28 |
백준 2751 수 정렬하기 2) merge sort(합병정렬) 재귀, 간단한 코드, c++ (0) | 2024.11.28 |
15990 실버 1) 1, 2, 3 더하기 5 DP (0) | 2024.10.23 |