λ°±μ€ 11780: νλ‘μ΄λ2
https://www.acmicpc.net/problem/11780
- λμμ κ°μ nμ μ λ ₯νλ€
- λ²μ€μ κ°μ mμ μ λ ₯νλ€
- λ²μ€μ μ 보λ₯Ό μ£Όμ΄μ§λ€.
// 'λ²μ€μ μμλμ λμ°© λμ νμν λΉμ©'μΌλ‘ μ΄λ£¨μ΄μ Έ μμ
- λμμμ λμλ‘ κ°λ κ²½μ°μ νμν μ΅μ κ²½λ‘μ μ§λμ³μΌ νλ λμμ κ°μ μ λμμ κ²½λ‘λ₯Ό μΆλ ₯ν΄μ€λ€
// λ§μ½ κ° μ μλ κ²½μ°μλ 0μ μΆλ ₯νλ€
// μ¦, λμ 1-> λμ 2μ μ 보, λμ2 -> λμ3μ μ 보 λ±..μ μΆλ ₯ν΄μ£Όλ κ²μ΄λ€
λ체 λ¬Έμ κ° λ λ§νλκ±΄μ§ λͺ¨λ₯΄κ² μ΄μ νμ°Έλ΄€λ€,,,,
λ¬Έμ λ₯Ό μ΄ν΄νκ³ μ 리νκ³ λμλ μκ°μ μ€λ ν΄λ³΄λ μ¬μ보μ¬μ μ΄κ²μ κ² ν΄λ³΄λ €κ³ νλκΉ μ λͺ»νκ² μλ€...
κ·Έλμ ꡬκΈλ§ν΄λ³΄λκΉ μ΄κ±΄ μκ³ λ¦¬μ¦ μ΅λ¨κ²½λ‘ μμΆμ λ¬Έμ λΌκ³ νλ€. μ 리νκ³ λμ΄κ°μΌν κ² κ°λ€
[μ°Έκ³ ] https://codenme.tistory.com/6?category=1026697
[μ½λμ°Έκ³ ] https://codenme.tistory.com/9
#include<iostream>
#include<vector>
using namespace std;
int arr[101][101];
const int inf = 987654321;
int nxt[101][101];
int main() {
int n, m, a, b, c;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
arr[i][j] = inf;
arr[i][i] = 0;
}
for (int i = 0; i < m; i++) {
cin >> a >> b >> c;
if (arr[a][b]>c) {//μ€μ!
arr[a][b] = c;
nxt[a][b] = b;
}
}
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int use = arr[i][k] + arr[k][j];
if (arr[i][j] > use) {
arr[i][j] = use;
nxt[i][j] = nxt[i][k];
}
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j] != inf)
cout << arr[i][j] << " ";
else
cout << 0 << " ";
}
cout << endl;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j] == inf||arr[i][j]==0)
cout << "0" << endl;
else {
//***μλλΆν° κ²½λ‘ μΆμ
vector<int> path;
path.push_back(i);
while (path.back() != j) {
int now = path.back();
path.push_back(nxt[now][j]);
}
cout << path.size() << " ";
for (auto p : path)
cout << p << " ";
cout << endl;
}
}
}
}