๊ฐ์
๊ทธ๋ํ์ ํ ์ ์ ์์ ๋ค๋ฅธ ์ ์ ์ผ๋ก ๊ฐ ๋์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ `๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ`๊ณผ `ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ`์ด ์๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ ํ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ณ , ์ฌ๊ธฐ์ ์์๋ณผ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๐ก ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ชจ๋ ์ ์ ์์ ๊ฐ์์ ๊ฐ์ ์ ๋ฐ๋ฅธ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
- 2~N๋ฒ ์ ์ ์ด 1๋ฒ ์ ์ ์ ๊ฑฐ์ณ๊ฐ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๊ฑฐ๋ ์ต์๊ฐ ๋๋ ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
- 1, 3~N๋ฒ ์ ์ ์ด 2๋ฒ ์ ์ ์ ๊ฑฐ์ณ๊ฐ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๊ฑฐ๋ ์ต์๊ฐ ๋๋ ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
- ํด๋น ๊ณผ์ ์ ๋ชจ๋ ์ ์ ์ด ๊ธฐ์ค ๋ ธ๋๋ฅผ ํ๋ฒ์ฉ ํ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ด๋ ๊ฒ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ฉด ๋ชจ๋ ์ ์ ์์ ๋ชจ๋ ์ ์ ์ ๋ํ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๋ค.
์์ค ์ฝ๋
์๊ณ ๋ฆฌ์ฆ ์์ฒด๊ฐ ๊ฐ๋จํ๋งํผ ์์ค ์ฝ๋๋ ๊ฐ๋จํ๋ค.
// ์ด๊ธฐํ ์ฝ๋
int[][] shortest = new int[n + 1][n + 1];
for (int v1 = 1; v1 <= n; v1++) {
for (int v2 = 1; v2 <= n; v2++) {
if (v1 == v2) shortest[v1][v2] = 0;
else if (v1 -> v2๋ก ๊ฐ๋ ๊ฒ์ด ์๋ค๋ฉด) shortest[v1][v2] = w;
else shortest[v1][v2] = INF;
}
}
// ์ค์ ์๊ณ ๋ฆฌ์ฆ
for (int v1 = 1; v1 <= n; v1++) {
for (int v2 = 1; v2 <= n; v2++) {
for (int v = 1; v <= n; v++) {
shortest[v2][v] = Math.min(shortest[v2][v], shortest[v2][v1] + shortest[v1][v]);
}
}
}
๋จ์ํ๊ฒ ์ค๊ฐ ๋ ธ๋ v1, ์ต๋จ ๊ฒฝ๋ก ์์ ๋ ธ๋ v2, ์ต๋จ ๊ฒฝ๋ก ๋์ฐฉ ๋ ธ๋ v ์์ผ๋ก 3์ค for๋ฌธ์ ๋ง๋ค๋ฉด ๋๋ค.
1238 - ํํฐ : https://www.acmicpc.net/problem/1238
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
4485. ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? (0) | 2025.01.19 |
---|---|
1238. ํํฐ (0) | 2025.01.17 |
ํ์ ํธ๋ฆฌ (1) | 2024.10.03 |
16235๋ฒ ๋ฌธ์ ์ ์๊ฐ ์ค์ด๊ธฐ (1) | 2024.09.26 |
1513 ๋ฌธ์ ์์ ์ 4์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํด์ผ ํ๋? (0) | 2024.09.25 |