-
백준 11404 플로이드 | C++[백준 알고리즘]/[C++] 2021. 4. 6. 13:53728x90반응형
이번 포스팅은 백준 11404번 플로이드입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)
풀이
★시작 도시와 도착 도시를 연결하는 노선은 하나가 아닐 수 있다.
최소 비용을 계산하므로 입력 값이 중복되어 들어올 경우 더 작은 비용의 값으로 갱신한다.
★i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력한다.
i에서 j로 갈 수 없는 경우는 2가지이다.
1) i==j
출발 도시와 도착 도시가 같은 경우
2) map[i][j]==INF
도시 i와 도시 j 사이의 경로가 없는 경우
★INF 초기화를 충분히 큰 값으로 해줘야 한다.
전체 코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960//백준11404 플로이드#include <iostream>using namespace std;int N, M;const int MAX = 102;const int INF = 9999999;int map[MAX][MAX];void floyd() {for (int k = 1; k <= N; k++) {for (int i = 1; i <= N; i++) {for (int j = 0; j <= N; j++) {if (map[i][j] > map[i][k] + map[k][j]) {map[i][j] = map[i][k] + map[k][j];}}}}}int main() {cin >> N >> M;for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) {if (i == j) {map[i][j] = 0;}else {map[i][j] = INF;}}}for (int i = 0; i < M; i++) {int a, b, c;cin >> a >> b >> c;if (map[a][b] > c) {map[a][b] = c;}}floyd();for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) {if (map[i][j] == INF) {cout << 0 << " ";}else {cout << map[i][j] << " ";}}cout << "\n";}return 0;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
백준 2458 키 순서 | 플로이드-워셜 | C++ (0) 2021.04.08 백준 15654 N과 M (5) | 조합 | C++ (0) 2021.04.06 백준 9663 N-Queen | 백트래킹, DFS | C++ (0) 2021.04.01 백준 15652 N과 M (4) | 중복조합 | C++ (0) 2021.03.30 백준 15651 N과 M (3) | 중복순열 | C++ (0) 2021.03.30