๐ ๋ชจ๋ ์์ ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ
- ํ ๋
ธ๋์์ ๋ค๋ฅธ ๋
ธ๋๋ก ๊ฐ๋ ๊ฐ์ ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋นจ๋ฆฌ ๊ฐ ์ ์๋ ๊ธธ ์ฐพ๋ ๋ฌธ์
- ๊ฐ์ค์น ํฌํจ, ๋ฐฉํฅ์ฑ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ
- ์ต์ ํ ๋ฌธ์
- ์ฃผ์ด์ง ๋ฌธ์ ์ ๋ํด ํ๋ ์ด์์ ๋ง์ ํด๋ต์ด ์กด์ฌํ ๋, ์ด ๊ฐ์ด๋ฐ์์ ๊ฐ์ฅ ์ต์ ์ธ ํด๋ต ์ฐพ์์ผํ๋ ๋ฌธ์
๐ฌ DP ์ ๊ทผ ๋ฐฉ๋ฒ
- ๋ค์ต์คํธ๋ผ(Dijkstra)์ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ ์ํ
- ์ด ๋ ์๊ฐ ๋ณต์ก๋ : O(n^3)
- Warshall์ ๊ทธ๋ํ์์ ๋ชจ๋ ์์ ๊ฒฝ๋ก ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ฐพ์๋ด๋ DP ์๊ณ ๋ฆฌ์ฆ ์ ์
- Floyd๋ ์ด๋ฅผ ๋ณํํด ๋ชจ๋ ์ ์ต๋จ ๊ฒฝ๋ก ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ๊ณ ์
- ์๊ฐ ๋ณต์ก๋ : O(n^3)
- ๋ค์ต์คํธ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ ๊ฐ์ง๋ง ์ฝ๋๊ฐ ๊ฐ๋ตํด์ง
- ์ธ์ ํ๋ ฌ ์ด์ฉ
- ์ด๊ธฐ ์ธ์ ํ๋ ฌ์ ๊ฐ์ ์๊ธฐ ์์ ์์ ์๊ธฐ ์์ ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ(=0)๋ฅผ ์ ์ธํ๊ณ ๋ ๋ค๋ฅธ ๋
ธ๋๋ก ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ๋ชจ๋ ๋งค์ฐ ํฐ๊ฐ์ผ๋ก ์ด๊ธฐํ
๐ฌ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
int INF = Integer.MAX_VALUE;
int[][] dist = {{0,7,INF,INF,3,10,INF}
,{7,0,4,10,2,6,INF}
,{INF,4,0,2,INF,INF,INF}
,{INF,10,2,0,11,9,4}
,{3,2,INF,11,0,INF,5}
,{10,6,INF,9,INF,0,INF}
,{INF,INF,INF,4,5,INF,0}};
for (int k = 0; k < 7; k++) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}