알고리즘 분류에는 다익스트라로 되어있지만 모든 정점에서 모든 정점으로 가는 경로를 구해야하므로 플로이드 와샬로 풀었다.
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <iostream> #define INF 987654321 #define MAX 201 using namespace std; int n,m; int V[MAX][MAX]; int map[MAX][MAX]; void solved(){ int d[MAX][MAX]; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ d[i][j]=V[i][j]; } } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(d[i][k]+d[k][j]<d[i][j]){ d[i][j]=d[i][k]+d[k][j]; map[i][j]=map[i][k]; } } } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(map[i][j]==0) cout << "-" << " "; else cout << map[i][j] << " "; } cout << endl; } } int main(){ cin >> n >> m; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j) V[i][j]=0; else V[i][j]=INF; } } for(int i=1;i<=m;i++){ int a,b,c; cin >> a >> b >> c; V[a][b]=c; V[b][a]=c; map[a][b]=b; map[b][a]=a; } solved(); } | cs |
'Coding > 백준' 카테고리의 다른 글
| 11404번 플로이드 (0) | 2020.03.09 |
|---|---|
| 6593번 상범 빌딩 (0) | 2020.03.08 |
| 7562번 나이트의 이동 (0) | 2020.03.01 |
| 1956번 운동 (0) | 2020.02.28 |
| 2458번 키 순서 (0) | 2020.02.28 |