백준 11404번 플로이드
< 백준 11404번 플로이드 - 마포 코딩박 >
사용한 알고리즘: 플로이드 와샬
N개의 도시와 도시를 이동하는 버스들의 정보가 주어졌을 때, 임의의 도시 a 에서 도시 b 로 이동하는 비용을 구하는 문제였습니다.
N이 최대 100으로 작게 주어지고, 각 도시간 이동을 구하는 문제로, 플로이드-와샬로 문제를 해결하였습니다.
풀이는 다음과 같습니다.
(1) (코드 8~9, 14~17)
'cost[a][b] : a->b 이동하는 비용' 이라고 설정하고, 자기자신으로 이동하는 비용은 0, 나머지는 Infimum 으로 초기화했습니다.
(2) (코드 23~26)
플로이드와샬은 사실 이 3중 for문으로 끝납니다.
i->j 갈때, i->k->j 로 중간에 k 들렸다 가는게 작으면 값을 최신화해줍니다.
사용한 알고리즘: 플로이드 와샬
N개의 도시와 도시를 이동하는 버스들의 정보가 주어졌을 때, 임의의 도시 a 에서 도시 b 로 이동하는 비용을 구하는 문제였습니다.
N이 최대 100으로 작게 주어지고, 각 도시간 이동을 구하는 문제로, 플로이드-와샬로 문제를 해결하였습니다.
풀이는 다음과 같습니다.
(1) (코드 8~9, 14~17)
'cost[a][b] : a->b 이동하는 비용' 이라고 설정하고, 자기자신으로 이동하는 비용은 0, 나머지는 Infimum 으로 초기화했습니다.
(2) (코드 23~26)
플로이드와샬은 사실 이 3중 for문으로 끝납니다.
i->j 갈때, i->k->j 로 중간에 k 들렸다 가는게 작으면 값을 최신화해줍니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <algorithm> | |
using namespace std; | |
// 플로이드 와샬 | |
const int INF = 999999999; | |
int TC, N, M; | |
// cost[a][b] : a->b 이동하는 비용 | |
int cost[101][101]; | |
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); | |
cin >> N >> M; | |
// 초기화 | |
for (int i = 1; i <= N; ++i) | |
for (int j = 1; j <= N; ++j) | |
cost[i][j] = i==j? 0 : INF; | |
for (int i = 0; i < M; ++i){ | |
int s,e,t; | |
cin >> s >> e >> t; | |
cost[s][e] = min(cost[s][e],t); | |
} | |
for (int k = 1; k <= N; ++k) | |
for (int i = 1; i <= N; ++i) | |
for (int j = 1; j <= N; ++j) | |
cost[i][j] = min(cost[i][j], cost[i][k]+cost[k][j]); | |
for (int i = 1; i <= N; ++i){ | |
for (int j = 1; j <= N; ++j) | |
cost[i][j]==INF? cout << 0 << ' ' : cout << cost[i][j] << ' '; | |
cout << '\n'; | |
} | |
return 0; | |
} |
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!