[Java] ๋ฒจ๋ง-ํฌ๋ | ๋ฐฑ์ค 1865 ์ํ
https://www.acmicpc.net/problem/1865
์ด๋ฒ ๋ฌธ์ ๋ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ ํํธ๋ฅผ ๋ณด๊ณ ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ถ๊ฐ์ ์ผ๋ก ํ์ตํ ๋ค์ ํ์ด๋ณด์๋ค. ์์ง ์ด๋ ต๊ฒ ๋๊ปด์ง๋ ๋ฌธ์ ์ฌ์ ๋ด๊ฐ ํ๋ฉด์ ๋์น๊ณ ์์๊ฑฐ๋ ์๋กญ๊ฒ ์๊ฒ ๋ ํฌ์ธํธ๋ค์ ๊ฐ๋จํ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํ๋ค.
์๋ฐฉํฅ ๋๋ก ์ฒ๋ฆฌ
์ฒ์ ๋ด ์ฝ๋์์๋ ๋๋ก๋ฅผ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ์ฒ๋ฆฌํ๊ณ ์์๋ค. ๋๋ก๋ ์๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ ๋๋ก๋ฅผ ์ถ๊ฐํ ๋, ์์ชฝ ๋ฐฉํฅ ๋ชจ๋ ์ถ๊ฐํด์ผ ํ๋ค.
for (int i = 0; i < m; i++) {
edges.add(new Edge(station[i][0], station[i][1], station[i][2]));
edges.add(new Edge(station[i][1], station[i][0], station[i][2]));
}
์ผ๋ฐ์ ์ธ ๋ฒจ๋ง-ํฌ๋์์ INF๋ฅผ ์ฌ์ฉํ๋ ์ด์
Arrays.fill(dist, INF);
dist[start] = 0;
- ๋ณดํต "ํน์ ์์์ ์ผ๋ก๋ถํฐ์ ์ต๋จ ๊ฑฐ๋ฆฌ"๋ฅผ ๊ตฌํ ๋ ๋งค์ฐ ํฐ ๊ฐ(INF)์ dist ๋ฐฐ์ด์ ๋ฃ๊ณ ์ฌ์ฉํ๋ค.
- ์์์ ์ผ๋ก๋ถํฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ๋ค์ "๋๋ฌํ ์ ์์"์ ์๋ฏธํ๋ INF๋ก ํ์ํ๋๋ฐ,
- ์ด๊ฒ์ ์ค์ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ๊ตฌํด์ผ ํ ๋ ํ์ํ ๋ฐฉ์์ด๋ค.
ํด๋น ๋ฌธ์ ์์๋ dist๋ฐฐ์ด์ INF๋ก ์ด๊ธฐํ ์์ผ์ฃผ์ง ์๊ณ 0์ผ๋ก๋ง ์ด๊ธฐํ์์ผ์ฃผ์ด๋ ์ถฉ๋ถํ๋ค.
0์ผ๋ก๋ง ์ด๊ธฐํํด๋ ๋๋ ์ด์
Arrays.fill(dist, 0);
- ์ด ๋ฌธ์ ๋ ์์ ์ฌ์ดํด์ ์กด์ฌ ์ฌ๋ถ๋ง ํ์ธํ๋ฉด ๋๋ค.
- ์์ ์ฌ์ดํด์ ์ด๋ค ์ ์ ์์ ์์ํด์ ์ฌ๋ฌ ๊ฐ์ ์ ๊ฑฐ์น ํ ๋ค์ ์์์ ์ผ๋ก ๋์์์ ๋, ์ด ๊ฑฐ๋ฆฌ๊ฐ ์์๊ฐ ๋๋ ๊ฒฝ์ฐ์ด๋ค.
- ๋ชจ๋ ์ ์ ์ 0์ผ๋ก ์ด๊ธฐํํ๋ฉด
- ์ด๋ค ์ ์ ์์ ์์ํ๋ ์ด๊ธฐ๊ฐ์ด 0์ด๋ค.
- ์ฌ์ดํด์ด ์กด์ฌํ๋ฉด ๊ทธ ์ฌ์ดํด์ ๋๋ฉด์ ๊ฑฐ๋ฆฌ๊ฐ ๊ณ์ ๊ฐ์ํ ๊ฒ์ด๋ค
- ์์ ์ฌ์ดํด์ด ์๋ค๋ฉด V๋ฒ์งธ ๋ฐ๋ณต์์๋ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐฑ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ๋ ๊ณต๋ถํด๋ณด๊ณ ์ต์ํด์ง๋ฉด ๋ค์ ์ ๋ฆฌํด๋ณด๋ คํ๋ค.