문제 링크 : https://www.acmicpc.net/problem/11404
문제 설명
1. 도시의 갯수가 주어지고 그다음 줄에는 버스의 갯수가 주어짐
2. 그리고 그다음줄에 도시간 이동시 드는 버스비가 주어진다.
3. 각 도시에 다른도시로 이동하는 최소비용을 배열형식으로 출력.
알고리즘
1.제목부터 플로이드이다. 플로이드 와샬 알고리즘 사용해서풀면쉽게 풀린다 .
코드
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> #include<algorithm> using namespace std; int main() { cin.tie(NULL); ios::sync_with_stdio(false); int N, M, map[101][101]; cin >> N >> M; //배열 초기화 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j)map[i][j] = 0; else map[i][j] = 1000000000; } } //간선 정보 for (int j = 0; j < M; j++) { int a, b, c; cin >> a >> b >> c; map[a - 1][b - 1] = min(map[a - 1][b - 1], c); } //플로이드 와샬 알고리즘 for (int k = 0; k < N; k++) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { map[i][j] = min(map[i][j], map[i][k] + map[k][j]); } } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (map[i][j] == 1000000000) map[i][j] = 0; } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cout << map[i][j] << " "; } cout << "\n"; } } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 2458번 : 키 순서 (0) | 2020.04.30 |
---|---|
백준 1507번: 궁금한 민호 (0) | 2020.04.30 |
백준 3015번 : 오아시스 재결합 (0) | 2020.04.29 |
백준 1613번: 역사 (0) | 2020.04.29 |
백준 1722번 : 순열의 순서 (0) | 2020.04.29 |