jyukki published on 2020-03-03 included in 백준 https://www.acmicpc.net/problem/11404
풀이: [C++]플로이드-와샬 알고리즘(Bellman-Ford Algorithm) 참고
코드: 사용언어 : c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream>#include <algorithm>using namespace std; int n, m, i, a1, a2, a3, a[102][102]; int main() { cin >> n >> m; fill(a[0], a[0] + 10404, 987654321); for (i = 0; i < m; i++) { cin >> a1 >> a2 >> a3; a[a1][a2] = min(a[a1][a2], a3); } for (i = 1; i <= n; i++) for (int t = 1; t <= n; t++) for (int y = 1; y <= n; y++) if (t == y) a[t][y] = 0; else a[t][y] = min(a[t][y], a[t][i] + a[i][y]); for (i = 1; i <= n; i++) { for (int t = 1; t <= n; t++) if (a[i][t] == 987654321) cout << "0 "; else cout << a[i][t] << " "; cout << endl; } }
jyukki published on 2020-03-03 included in 백준 https://www.acmicpc.net/problem/1865
풀이: [C++]벨만-포드 알고리즘(Bellman-Ford Algorithm) 참고
벨만-포드 알고리즘으로 모든 정점을 순환 한 뒤, 음수 사이클이 있는지 판단 후 있다면, “YES” 를 없다면 “NO"를 출력한다. 코드: 사용언어 : c++
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 #include <iostream>#include <vector>using namespace std; int T, n, m, k, i, d[502], a1, a2, a3; int main() { cin >> T; while (T--) { bool b = true; cin >> n >> m >> k; vector<pair<pair<int, int>, int>> a; for (i = 0; i < m; i++) { cin >> a1 >> a2 >> a3; a.
jyukki published on 2020-03-02 included in 백준 https://www.acmicpc.net/problem/11657
풀이: [C++]벨만-포드 알고리즘(Bellman-Ford Algorithm) 참고
코드: 사용언어 : c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <iostream>using namespace std; #define INF 987654321 int n, m, i, d[502], a1, a2, a3; pair<pair<int, int>, int> a[6002]; int main() { cin >> n >> m; for (i = 0; i < m; i++) cin >> a[i].
jyukki published on 2020-03-02 included in 백준 https://www.acmicpc.net/problem/9370
풀이: [C++]다익스트라 알고리즘(Dijkstra Algorithm) 참고
s -> g -> h -> x
s -> h -> g -> x
두 가지 경로가 있는데, 둘 중 하나라도 최단 경로일 경우 x를 배열에 저장한다.
저장된 x를 오름차순으로 출력한다.
코드: 사용언어 : c++
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 60 61 62 63 64 65 66 67 68 69 #include <iostream>#include <vector>#include <queue>using namespace std; int T, n, m, t, u, v, w, i, s, g, h, v1, v2, a1, c, d[2002]; bool b[2002]; priority_queue<pair<int, int>> p; priority_queue<int, vector<int>, greater<int>> q; int main() { cin >> T; while (T--) { cin >> n >> m >> t; vector<vector<pair<int, int>>> a(n + 1); cin >> s >> g >> h; for (i = 0; i < m; i++) { cin >> u >> v >> w; a[u].
jyukki published on 2020-03-01 included in 백준 https://www.acmicpc.net/problem/1504
풀이: [C++]다익스트라 알고리즘(Dijkstra Algorithm) 참고
지나야 하는 두 개의 정점을 v1, v2 라고 할때,
1 ~ v1 ~ v2 ~ N
1 ~ v2 ~ v1 ~ N
으로 나눠서 풀어본다.
1~v1, v2 과 v1 ~ v2 과 v1, v2 ~ N 을 다익스트라 알고리즘으로 각각 구하여 더한값이
최소인 값을 구한다. 만약 경로가 없다면 -1을 출력한다.
코드: 사용언어 : c++
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 #include <iostream>#include <vector>#include <queue>using namespace std; int V, E, u, v, w, i, d[805], v1, v2, a1, a2; priority_queue<pair<int, int>> p; bool b[805]; int main() { cin >> V >> E; vector<vector<pair<int, int>>>a(V + 1); for (i = 0; i < E; i++) { cin >> u >> v >> w; a[u].
jyukki published on 2020-03-01 included in 백준 https://www.acmicpc.net/problem/1753
풀이: [C++]다익스트라 알고리즘(Dijkstra Algorithm) 참고
코드: 사용언어 : c++
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 #include <iostream>#include <vector>#include <queue>using namespace std; int V, E, k, u, v, w, i; vector<int> d; priority_queue<pair<int, int>> p; bool b[20002]; int main() { cin >> V >> E >> k; vector<vector<pair<int, int>>>a(V + 1); for (i = 0; i <= V; i++) d.