모든 지점에서 모든 지점까지의 최단경로를 구하는 알고리즘. 삼중for문과 초기값 설정을 이용해서 풀이할 수 있다.
동일지점까지의 거리는 항상 0임에 유의.
#include<iostream>
#define Max 1000000001
using namespace std;
int n, m;
int mp[101][101];
int main(){
cin>>n>>m;
int a, b, v;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
mp[i][j]=Max;
if(i==j){
mp[i][i]=0;
}
}
}
for(int i=0; i<m; i++){
cin>>a>>b>>v;
if(mp[a][b]>v){
mp[a][b]=v;
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
for(int k=1; k<=n; k++){
mp[j][k]=min(mp[j][k], mp[j][i]+mp[i][k]);
}
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(mp[i][j]==Max){
cout<<"0"<<" ";
}
else{
cout<<mp[i][j]<<" ";
}
} cout<<"\n";
}
}'알고리즘' 카테고리의 다른 글
| Boj 28325 c++ 호숫가의 개미굴 (2) | 2025.07.20 |
|---|---|
| Boj 1912 c++ 연속합 (0) | 2025.07.19 |
| Boj 9251 c++ LCS (0) | 2025.07.16 |
| Boj 9465 c++ 스티커 (0) | 2025.07.16 |
| Boj 1932 c++ 정수 삼각형 (0) | 2025.07.15 |