Algorithm π§π»π»/λ°±μ€(BOJ)
[λ°±μ€,c++] 11780λ² - νλ‘μ΄λ2
dkswnkk
2021. 10. 31. 20:08
11780λ²: νλ‘μ΄λ 2
첫째 μ€μ λμμ κ°μ nμ΄ μ£Όμ΄μ§κ³ λμ§Έ μ€μλ λ²μ€μ κ°μ mμ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ μ§Έ μ€λΆν° m+2μ€κΉμ§ λ€μκ³Ό κ°μ λ²μ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. λ¨Όμ μ²μμλ κ·Έ λ²μ€μ μΆλ° λμμ λ²νΈκ°
www.acmicpc.net
#include <iostream>
#include <vector>
#define INF 1e9 //무νμ μλ―Ένλ κ°μΌλ‘ 10μ΅μ μ§μ
using namespace std;
int graph[101][101];
int n, m,cnt; //n=λμμ κ°μ, m=λ²μ€μ κ°μ
int path[101][101];
void findCost(int a, int b) { //κ²½λ‘μ ν¬ν¨λ λμμ κ°μλ₯Ό ꡬνλ ν¨μ
if (path[a][b] != INF) {
cnt++;
findCost(a, path[a][b]);
findCost(path[a][b], b);
}
}
void findPath(int a, int b) { //μ¬κ·μ μΌλ‘ νΈμΆνλ©΄μ κ²½λ‘λ₯Ό μΆλ ₯νλ ν¨μ
if (path[a][b] != INF) {
findPath(a, path[a][b]);
cout << path[a][b] << ' ';
findPath(path[a][b], b);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < 101; i++) { //μ΅λ¨ 거리 ν
μ΄λΈμ 무νμΌλ‘ μ΄κΈ°ν;
fill(graph[i], graph[i] + 101, INF);
fill(path[i], path[i] + 101, INF);
}
for (int a = 1; a <= n; a++) { //μκΈ° μμ μμ μκΈ° μμ μΌλ‘ κ°λ λΉμ©μ 0
for (int b = 1; b <= n; b++) {
if (a == b) {
graph[a][b] = 0;
path[a][b] = 0;
}
}
}
for (int i = 0; i < m; i++) { //κ°μ μ 보 μ
λ ₯
int a, b, c; cin >> a >> b >> c;
graph[a][b] = min(graph[a][b], c); //aμμ bκΉμ§ κ°λλ° cλ§νΌμ λΉμ©μ΄ λ λ€.
}
for (int k = 1; k <= n; k++) { //νλ‘μ΄λ-μμ¬ μκ³ λ¦¬μ¦ μν
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= n; b++) {
if (graph[a][k] + graph[k][b] < graph[a][b]) {
graph[a][b] = graph[a][k] + graph[k][b];
path[a][b] = k;
}
// graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b]);
}
}
}
for (int a = 1; a <= n; a++) { //i->jλ‘ κ°λλ° νμν μ΅μ λΉμ© μΆλ ₯
for (int b = 1; b <= n; b++) {
if (graph[a][b] == INF) cout << 0 << ' ';
else cout << graph[a][b] << ' ';
}
cout << "\n";
}
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= n; b++) {
if (graph[a][b] == INF||a==b) cout << 0<<'\n';
else {
cnt = 2; //μμκ³Ό λμ 무쑰건 μ§λλ―λ‘ 2λΆν° μμ
findCost(a, b);
cout << cnt << ' ' << a << ' ';
findPath(a, b);
cout << b << "\n";
}
}
}
}