1. ๊ธฐ๋ณธ ๊ฐ๋ ๐
1. ์ต๋จ ๊ฒฝ๋ก
๊ฐ์ค์น ๊ทธ๋ํ์์ ๋ ์ ์ ์ฌ์ด์ ๊ฒฝ๋ก๋ค ์ค์์ ๊ฐ์ค์น์ ํฉ์ด ์ต์๊ฐ ๋๋ ๊ฒฝ๋ก
2. ๋ํ์ ์ธ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ
๋ค์ต์คํธ๋ผ(Dijkstra) | ๋ฒจ๋งํฌ๋(Bellman-Ford) | ํ๋ก์ด๋ ์์ฌ(Floyd-Warshall) | |
์ ์ | ์ถ๋ฐ ์ ์ ๋ก๋ถํฐ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ | ์ถ๋ฐ ์ ์ ๋ก๋ถํฐ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ | ๋ชจ๋ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ |
ํน์ง | ์์ ๊ฐ์ค์น๋ฅผ ํ์ฉ X | ์์ ๊ฐ์ค์น๋ฅผ ํ์ฉ O | ์์ ๊ฐ์ค์น๋ฅผ ํ์ฉ O |
์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ | ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ | ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ | DP ์๊ณ ๋ฆฌ์ฆ |
์๊ฐ๋ณต์ก๋ | O(V ^ 2) ๋๋ O(E log V) | O(V ^ 2) ๋๋ O(E log V) | O(V ^ 3) |
2. ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ ๐ฅ
1. ๊ฐ๋
์ถ๋ฐ ์ ์ ์ผ๋ก๋ถํฐ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
(๋ง์ฝ ๋ชจ๋ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ ์๋ ํน์ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ํด๋น ์ ์ ์ ๋ฐฉ๋ฌธํ์ ๋ ๋น ์ ธ๋์ค๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ - ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ๊ฒ์ ๊ธฐ๋ฐํ ๊ตฌํ)
2. ๋์ ๋ฐฉ์
[ํ ์ค ์ ๋ฆฌ]
์์ง๊น์ง ์ ํ๋์ง ์์ ์ ์ ๋ค ์ค์์, ์์์ ์ผ๋ก๋ถํฐ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๊ฒ์ ๋ฐฉ๋ฌธํ๋ ๊ฒ!
[๊ตฌ์ฒด์ ๋ฐฉ์]
- ์ถ๋ฐ ์ ์ ์ ์ ํํ๋ค.
- ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ์ ์ด๊ธฐํํ๋ค.
์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ ์๋ ๊ฒฝ์ฐ ๋ฌดํ๋๋ก ์ง์ - ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ๋ค ์ค์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ค.
- ํด๋น ์ ์ ์ผ๋ก๋ถํฐ ๋ค๋ฅธ ์ ์ ์ผ๋ก ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ์ ์
๋ฐ์ดํธํ๋ค.
๋ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์๋ง ์ ๋ฐ์ดํธํจ. - 3๋ฒ๊ณผ 4๋ฒ์ ๋ฐ๋ณตํ๋ค.
3. PRIM ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฐจ์ด์
PRIM ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ '๋ค์์ ๋ฐฉ๋ฌธํ ์ ์ ์ ์ ํํ๋ ๋ฐฉ์'์ด๋ค.
- PRIM ์๊ณ ๋ฆฌ์ฆ
์ด์ ์ ๋ฐฉ๋ฌธํ ์ ์ ์์๋ถํฐ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ์ ์ ์ ์ ๋ฐฉ๋ฌธํจ - ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ
์์์ ์ผ๋ก๋ถํฐ ์์ง ๋ฐฉ๋ฌธํ ์ง ์์ ์ ์ ๋ค ์ค ์ต๋จ๊ฑฐ๋ฆฌ์ ํด๋นํ๋ ์ ์ ์ ๋ฐฉ๋ฌธํจ.
3. ์์๋ฅผ ํตํ ๋์์ดํด ๐
์์ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ํ์.
์ฐ์ , ์ถ๋ฐ ์ ์ ์ ์ ํํ๋ค. ์ฌ๊ธฐ์๋ 1๋ฒ์ ์ถ๋ฐ ์ ์ ์ด๋ผ๊ณ ํ์.
๊ทธ๋ฆฌ๊ณ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์ด๊ธฐํ์ํค์. ์ถ๋ฐ ์ ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ๋น์ฐํ 0์ด๋ค.
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | 0 | ∞ | ∞ | ∞ | ∞ | ∞ |
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | 0 | ∞ | ∞ | ∞ | ∞ | ∞ |
๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ๋ค ์ค์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ ์ ์ธ 1๋ฒ์ ๋ฐฉ๋ฌธํ๋ค. (์ถ๋ฐ ์ ์ ์ ์ฒ์๋ถํฐ ๋ฐฉ๋ฌธํ ๊ฒ์ผ๋ก ํํํ ์๋ ์์ง๋ง, ์ฝ๋๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ธฐ ์ํ์ฌ ํด๋น ๋ฐฉ์์ ์ฌ์ฉํ๋ค.)
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | 7 | 9 | ∞ | ∞ | 14 |
๊ทธ๋ฆฌ๊ณ ํด๋น ์ ์ (1๋ฒ ์ ์ )์ผ๋ก๋ถํฐ ๋ค๋ฅธ ์ ์ ์ผ๋ก ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์ ๋ฐ์ดํธํ๋ค.
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | 7 | 9 | ∞ | ∞ | 14 |
๋ฐฉ๋ฌธํ 1๋ฒ ์ ์ ์ ์ ์ธํ๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ๋ค ์ค ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ ์ ์ธ 2๋ฒ์ ๋ฐฉ๋ฌธํ๋ค.
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 9 | 22 | ∞ | 14 |
๊ทธ๋ฆฌ๊ณ ํด๋น ์ ์ (2๋ฒ ์ ์ )์ผ๋ก๋ถํฐ ๋ค๋ฅธ ์ ์ ์ผ๋ก ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์ ๋ฐ์ดํธํ๋ค. ์ด๋, ์ถ๋ฐ ์ ์ ์ผ๋ก ๋ถํฐ 3๋ฒ ์ ์ ์ผ๋ก ๊ฐ ์ ์๋ ์๋ก์ด ๊ฑฐ๋ฆฌ์ธ 17์ ์๋๋ผ๋ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์๋ 3๋ฒ ์ ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ฐ์ด ๋ ์์ผ๋ฏ๋ก ์ ๋ฐ์ดํธํ์ง ์๋๋ค.
์ดํ์ ๋์ ๋ฐฉ์์ ๊ทธ๋ฆผ๊ณผ ํ๋ง ์์ด๋ ์ถฉ๋ถํ ์ดํดํ ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค.
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 9 | 22 | ∞ | 14 |
[์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ ์ ๋ฐ์ดํธ]
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 20 | ∞ | 11 |
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 20 | ∞ | 11 |
[์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ ์ ๋ฐ์ดํธ]
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 20 | 20 | ๋ฐฉ๋ฌธ |
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 20 | 20 | ๋ฐฉ๋ฌธ |
(4๋ฒ๊ณผ 5๋ฒ ์ค ์ด๋ ์ ์ ์ ๋จผ์ ๋ฐฉ๋ฌธํด๋ ์๊ด์๋ค.)
[์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ ์ ๋ฐ์ดํธ]
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 20 | ๋ฐฉ๋ฌธ |
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | 20 | ๋ฐฉ๋ฌธ |
[์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ ์ ๋ฐ์ดํธ]
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ | ๋ฐฉ๋ฌธ |
์ด๋ฌํ ์ ์ฐจ๋ฅผ ๊ฑฐ์ณ์ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ค. ์ค์ ์ฝ๋๋ฅผ ์ด์ฉํ ๊ตฌํ์์๋ ๋ฐฉ๋ฌธํ ์ ์ ์ด๋๋ผ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ '๋ฐฉ๋ฌธ'์ด๋ผ๊ณ ํ์๋์ง ์๊ณ '์ต๋จ ๊ฑฐ๋ฆฌ'๋ฅผ ํ์ํ๊ฒ ๋๋ค. ์์์๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํด '๋ฐฉ๋ฌธ'์ด๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ์๋ค.
์ต์ข ์ ์ผ๋ก ์ถ๋ฐ ์ ์ (1๋ฒ ์ ์ )์์๋ถํฐ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ์๋์ ๊ฐ๋ค.
์ ์ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 |
์ต๋จ ๊ฑฐ๋ฆฌ | 0 | 7 | 9 | 20 | 20 | 11 |
4. ๊ตฌํ(JAVA) ๐ฅ
๊ตฌํ ๋ฐฉ๋ฒ์๋ '์์ฐจ ํ์'๊ณผ '์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์'์ด ์๋ค. ์๊ฐ ๋ณต์ก๋์ ๊ดํ ๊ฒฐ๋ก ๋ถํฐ ์๊ธฐํ์๋ฉด ์๋์ ํ์ ๊ฐ๋ค.
๊ตฌํ ๋ฐฉ์ | ์์ฐจ ํ์ | ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์ |
์๊ฐ ๋ณต์ก๋ | O(V ^ 2) | O(E log V) |
1. ์์ฐจ ํ์
์์ฐจ ํ์์ 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ๊ตฌํํ์๋ค. ํ์ฌ ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ ์ผ์ผ์ด ํ์ธํด์ผ ํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ O(V ^ 2)์ด๋ค.
์ ๋ ฅ์ ์ ์ ๊ฐ์(N)์ ์ถ๋ฐ ์ ์ ์ ์ธ๋ฑ์ค ๋ฒํธ(S)๋ฅผ ๋จผ์ ๋ฐ๋๋ค. (์์์๋ ์ถ๋ฐ ์ ์ ์ ๋ฒํธ๋ฅผ ์ด์ฉํ์๋๋ฐ ์ฝ๋์์๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ค.) ๊ทธ๋ฆฌ๊ณ N * N ํ๋ ฌ์ ๋ชจ์ต์ผ๋ก ๊ฐ์ค์น๋ค์ ๋ฐ์์จ๋ค.
6 0
0 7 9 0 0 14
0 0 10 15 0 0
0 0 0 11 0 2
0 0 0 0 6 0
0 0 0 0 0 0
0 0 0 0 9 0
public final class Main {
static int V, S;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
// ์ ์ ๊ฐ์
V = Integer.parseInt(st.nextToken());
// ์ถ๋ฐ ์ ์ ์ ํ - ๋์๋ฐฉ์(1)
S = Integer.parseInt(st.nextToken());
// ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๋ 2์ฐจ์ ๋ฐฐ์ด
int[][] weights = new int[V][V];
for(int i = 0; i < V; i++) {
st = new StringTokenizer(in.readLine(), " ");
for(int j = 0; j < V; j++) {
weights[i][j] = Integer.parseInt(st.nextToken());
}
}
boolean[] visited = new boolean[V];
// ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ ์ด๊ธฐํ - ๋์๋ฐฉ์(2)
int[] minDistances = new int[V];
final int INF = Integer.MAX_VALUE;
Arrays.fill(minDistances, INF);
minDistances[S] = 0;
int minDistanceToCurrentV, currentV;
for(int vCnt = 0; vCnt < V; vCnt++) {
// ๋ฐฉ๋ฌธํ ์ ์
currentV = -1;
// ํด๋น ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ
minDistanceToCurrentV = INF;
// ๋ฐฉ๋ฌธ ํ์ง ์์ ์ ์ ๋ค ์ค์์
// ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ ์ ์ ๋ฐฉ๋ฌธ - ๋์ ๋ฐฉ์(3)
for(int i = 0; i < V; i++) {
if(visited[i])
continue;
if(minDistances[i] < minDistanceToCurrentV) {
minDistanceToCurrentV = minDistances[i];
currentV = i;
}
}
// ๋ ์ด์ ๋ฐฉ๋ฌธ ํ ์ ์๋ ๊ฒฝ์ฐ
if(currentV == -1) {
break;
}
visited[currentV] = true;
// ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ ์
๋ฐ์ดํธ - ๋์ ๋ฐฉ์(4)
for(int i = 0; i < V; i++) {
if(visited[i])
continue;
if(weights[currentV][i] == 0)
continue;
if(minDistances[currentV] + weights[currentV][i]
< minDistances[i]) {
minDistances[i] = minDistances[currentV] + weights[currentV][i];
}
}
}
System.out.println("์ถ๋ฐ ์ ์ : " + S);
for(int i = 0; i < V; i++) {
System.out.println("์ต๋จ ๊ฑฐ๋ฆฌ[" + i + "] : " + minDistances[i]);
}
}
}
2. ์ฐ์ ์์ ํ(PQ)๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์
PQ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ๊ฐ์ ๋ค์ ์ฝ์ ๋๋ ์ญ์ ํ๋ค. ์ต๋ E๊ฐ๋ฅผ ์ฝ์ ๋๋ ์ญ์ ํ ์ ์์ผ๋ฏ๋ก O(E log E)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. (E๊ฐ * PQ์์ ์ฝ์ ์ญ์ ์๊ฐ logE)
๋๊ฒ ๊ทธ๋ํ์ ๊ฒฝ์ฐ V^2 > E ์ด๋ฏ๋ก O(log E) = O(log V)๋ก ํํํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก PQ๋ฅผ ์ด์ฉํ ์๊ฐ๋ณต์ก๋๋ O(E log V)๊ฐ ๋๋ค. (์ฐธ์กฐ)
public class Main {
static int V, S;
static class Vertex implements Comparable<Vertex> {
public int idx;
public int minDistance;
public Vertex(int num, int minDistance) {
this.idx = num;
this.minDistance = minDistance;
}
@Override
public int compareTo(Vertex o) {
return this.minDistance - o.minDistance;
}
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
// ์ ์ ๊ฐ์
V = Integer.parseInt(st.nextToken());
// ์ถ๋ฐ ์ ์ ์ ํ - ๋์๋ฐฉ์(1)
S = Integer.parseInt(st.nextToken());
// ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๋ 2์ฐจ์ ๋ฐฐ์ด
int[][] weights = new int[V][V];
for(int i = 0; i < V; i++) {
st = new StringTokenizer(in.readLine(), " ");
for(int j = 0; j < V; j++) {
weights[i][j] = Integer.parseInt(st.nextToken());
}
}
boolean[] visited = new boolean[V];
// ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ ์ด๊ธฐํ - ๋์๋ฐฉ์(2)
int[] minDistances = new int[V];
final int INF = Integer.MAX_VALUE;
Arrays.fill(minDistances, INF);
minDistances[S] = 0;
PriorityQueue<Vertex> pq = new PriorityQueue<>();
pq.offer(new Vertex(S, minDistances[S]));
while(!pq.isEmpty()) {
// ๋ฐฉ๋ฌธ ํ์ง ์์ ์ ์ ๋ค ์ค์์
// ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ ์ ์ ๋ฐฉ๋ฌธ - ๋์ ๋ฐฉ์(3)
Vertex currentV = pq.poll();
int currentVIdx = currentV.idx;
if(visited[currentVIdx]) {
continue;
}
visited[currentVIdx]= true;
// ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ ์
๋ฐ์ดํธ - ๋์ ๋ฐฉ์(4)
// ๊ณ์ ํ์์ ํ๊ธฐ ์ํด ์๋ก์ด ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๋ฉด PQ์ ๋ฃ์ด์ฃผ๊ธฐ
for(int i = 0; i < V; i++) {
if(visited[i])
continue;
if(weights[currentVIdx][i] == 0)
continue;
if(minDistances[currentVIdx] + weights[currentVIdx][i]
< minDistances[i]) {
minDistances[i] = minDistances[currentVIdx] + weights[currentVIdx][i];
pq.offer(new Vertex(i, minDistances[i]));
}
}
}
System.out.println("์ถ๋ฐ ์ ์ : " + S);
for(int i = 0; i < V; i++) {
System.out.println("์ต๋จ ๊ฑฐ๋ฆฌ[" + i + "] : " + minDistances[i]);
}
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > ์ต๋จ ๊ฒฝ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก์ด๋-์์ฌ(Floyd-Warshall) ์๊ณ ๋ฆฌ์ฆ (0) | 2023.04.03 |
---|