[ ๋ฌธ์ ๋งํฌ ]
https://www.acmicpc.net/problem/11780
๐ฉ ์กฐ๊ฑด
- ๋ชจ๋ ๋์์ ์์ ๋ํด ํ์ํ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํด๋ผ
- ๊ฐ ์ต์๊ฐ์ ๋ํด ๊ฒฝ๋ก๋ฅผ ๊ตฌํด๋ผ
๐ฉ ์ ๊ทผ
1 -> ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ ์ด์ฉํ์! (์ผ์คfor๋ฌธ ์ฐ๋ฉด ๋จ)
2 -> ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ๋ก๋ณต์
(nxt table ๋ง๋ค์ด์ ๊ฒฝ๋ก ๊ฐฑ์ ๋ ๋๋ง๋ค nxt๋ ๊ฐฑ์ )
๐ฉ ์ํ์ฐฉ์ค
๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผ์ ๋ง์ด ํ๋๋ฐ(์ฌ๊ทํจ์, while๋ฌธ ๋ฑ๋ฑ) ์ ์ ํ๋ ธ๋ค. ๊ทผ๋ฐ ๋ฐฉ๋ฒ์ ๋ฌธ์ ๊ฐ ์๋๋ผ nxt table์ ๋ณด๋ ๋ฐฉ๋ฒ์ด ํ๋ ธ๋ ๊ฒ์ด์๋ค.ใ
nxt table์ด ์์ ๊ฐ์ผ๋ฉด 2์์ 1๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ ์๋์ ๊ฐ์ด ์๊ฐํด์ผ ํ๋ค.
nxt[2][1] = 4 (2์์ 1๋ก ์ต์๋น์ฉ์ผ๋ก ๊ฐ๋ ค๋ฉด 4๋ฅผ ๊ฑฐ์ณ์ผ ํจ, 4๋ก ์ด๋)
-> nxt[4][1] = 5 (4์์ 1๋ก ์ต์๋น์ฉ์ผ๋ก ๊ฐ๋ ค๋ฉด 5๋ฅผ ๊ฑฐ์ณ์ผ ํจ, 5๋ก ์ด๋)
-> nxt[5][1] = 1 (5์์ 1๋ก ์ต์๋น์ฉ์ผ๋ก ๊ฐ๋ ค๋ฉด 1๋ก ๋ฐ๋ก ๊ฐ์ผ ํจ, ๋์ฐฉ!)
์ฆ, nxt[i][j]==j ๊ฐ ๋ ๋ ๊น์ง nxt์ ์์๋์๋ฅผ ์
๋ฐ์ดํธ ํ๋ฉด ๋๋ค.
๐ป ์ฝ๋ (C++)
#include <iostream>
#include <vector>
#define INF 100000000
using namespace std;
int table[101][101];
int nxt[101][101];
int cnt = 2;
vector<int> path;
int main() {
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= 100; j++) {
table[i][j] = INF;
}
}
int n, m, a, b, c;
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> a >> b >> c;
if (table[a][b] > c) {
table[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++) {
if (i == j) {
table[i][j] = 0;
continue;
}
if (table[i][j] > table[i][k] + table[k][j]) {
table[i][j] = table[i][k] + table[k][j];
nxt[i][j] = nxt[i][k];
}
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (table[i][j] >= INF) {
cout << 0;
}
else {
cout << table[i][j];
}
cout << " ";
}
cout << "\n";
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (nxt[i][j] == 0) {
cout << 0 << "\n";
continue;
}
path.push_back(i);
int st = i;
while (nxt[st][j] != j) {
cnt++;
path.push_back(nxt[st][j]);
st = nxt[st][j];
}
path.push_back(j);
cout << cnt << " ";
for (int k = 0; k < path.size(); k++) {
cout << path[k] << " ";
}
path.clear();
cnt = 2;
cout << "\n";
}
}
}
'๐ป Algorithms > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11403 ๊ฒฝ๋ก ์ฐพ๊ธฐ - ๊ทธ๋ํ, DFS (0) | 2024.08.17 |
---|---|
[๋ฐฑ์ค] 1927 ์ต์ ํ - ์ฐ์ ์์ ํ (0) | 2024.08.14 |
[๋ฐฑ์ค] 11404 ํ๋ก์ด๋ - ํ๋ก์ด๋ (0) | 2024.08.04 |
[๋ฐฑ์ค] 16398 ํ์ฑ์ฐ๊ฒฐ - MST, ์ฐ์ ์์ ํ (0) | 2024.08.04 |
[๋ฐฑ์ค] 1766 ๋ฌธ์ ์ง - ์์์ ๋ ฌ, ์ฐ์ ์์ ํ (0) | 2024.08.04 |