11404번 - 플로이드
플로이드 워셜 기본 문제.
단, A에서 B로 가는 경로가 입력으로 여러개 들어올 수 있다.
따라서 그 중에서 가장 작은 값을 D[A][B] 에 넣어줘야 한다.
<정답 코드>
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 | #include<iostream> using namespace std; const int INF = 20000000; int D[101][101]; int main() { int n, m; scanf("%d %d", &n, &m); for (int i = 0; i < 101; i++) { for (int j = 0; j < 101; j++) { D[i][j] = i == j ? 0 : INF; } } for(int i=0;i<m;i++) { int a, b, c; scanf("%d %d %d", &a, &b, &c); D[a][b] = D[a][b] > c ? c : D[a][b]; } for (int k = 1; k <= n; k++) { for (int i = 1; i <=n; i++) { for (int j = 1; j <=n; j++) { if (D[i][j] > D[i][k] + D[k][j]) { D[i][j] = D[i][k] + D[k][j]; } } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (D[i][j] >= INF) { printf("0 "); } else { printf("%d ", D[i][j]); } } puts(""); } return 0; } | cs |
반응형