728x90
0. [c++] 백준 - |
https://www.acmicpc.net/problem/1956
1. 풀이 |
2. 소스코드 |
- 다익스트라 활용
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> #include<vector> #include<queue> using namespace std; const int INF = 1000000007; const int MAX_V = 401; vector<pair<int, int> > idx[MAX_V]; int V, E, ret = INF; void dijkstra(const int& start) { vector<int> dist(V+1, INF); priority_queue<pair<int, int> > pq; pq.push({ 0, start }); while (!pq.empty()) { int cost = -pq.top().first; int here = pq.top().second; pq.pop(); for (int i = 0; i < idx[here].size(); i++) { int there = idx[here][i].first; int next_cost = cost + idx[here][i].second; if (next_cost < dist[there]) { dist[there] = next_cost; pq.push({ -next_cost, there }); } } } if (ret > dist[start]) { ret = dist[start]; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> V >> E; int a, b, c; for (int i = 0; i < E; i++) { cin >> a >> b >> c; idx[a].push_back({ b,c }); } for (int i = 1; i <= V; i++) { dijkstra(i); } if (ret == INF) cout << -1 << endl; else cout << ret << endl; return 0; } | cs |
- 플로이드 활용
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 | #include<iostream> #include<vector> #include<queue> using namespace std; const int INF = 1000000007; const int MAX_V = 401; int V, E, ret = INF; int dist[MAX_V][MAX_V]; void floyd() { for (int k = 1; k <= V; k++) for (int i = 1; i <= V; i++) for (int j = 1; j <= V; j++) if (dist[i][j] > dist[i][k] + dist[k][j]) dist[i][j] = dist[i][k] + dist[k][j]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> V >> E; for (int i = 1; i <= V; i++) for (int j = 1; j <= V; j++) dist[i][j] = INF; int a, b, c; for (int i = 0; i < E; i++) { cin >> a >> b >> c; if(dist[a][b] > c) dist[a][b] = c; } floyd(); for (int i = 1; i <= V; i++) { if (ret > dist[i][i]) ret = dist[i][i]; } if (ret == INF) cout << -1 << endl; else cout << ret << endl; return 0; } | cs |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
'<백준> > 최단 경로(그래프)' 카테고리의 다른 글
[c++] 백준 11779 - 최소비용 구하기 2(DP, 그래프) (0) | 2020.04.18 |
---|---|
[C++] 백준 11404 - 플로이드(플로이드 알고리즘) (0) | 2020.03.11 |
[C++] 백준 9370 - 미확인 도착지(그래프, 다익스트라, dijkstra) (0) | 2020.03.04 |