[๋ธ๋ก๊ทธ ์ด์ ]
2023.08.16
Traveling Salesman problem (TSP)
โ
- ์ํ๋๊น ์์์ ์ด ์ด๋๋ ๊ฒฐ๊ณผ๋ ๊ฐ์ โจ A~>A ๋ง ๊ณ์ฐ
- ๊ฒน์น๋ ๊ฒฝ๋ก๊ฐ ๋ง์ โจ dp ์ฌ์ฉ
- n <= 16 ์ โจ visited๋ฅผ ๋นํธ ์ฐ์ฐ์ผ๋ก ํด๋ ๋จ.
โ
โ
์ดํดํ๊ธฐ ์ด๋ ค์ ๋๊ฒ TCP()๊ฐ ํ๋ ์ผ์. ๋๋์ฒด ๋ญ ํ๋
โ
TCP(now, visited) ๋ผ๊ณ ํ ๋,
TCP๋ ํ์ฌ ์์น๊ฐ now์ด๊ณ , visited๋ฅผ ๋ฐฉ๋ฌธํ ์ํ์์ ๋ค์ A๋ก ๋์๊ฐ๋ ๊ฒฝ๋ก์ ์ต์ ๋น์ฉ์ ๊ตฌํจ.
โ
๋ฐ๋ผ์ TCP(A,A)๋ ์๋ ๋นจ๊ฐ ๊ฒฝ๋ก์ ์ต์๋น์ฉ์ ๊ตฌํจ. (์ค์ TCP(0,1))

โ
DP{now][visited]๋ ๊ฐ์ ์ผ์ ํจ.
๊ทธ๋์ ์๋ ๊ฒฝ์ฐ D~>A๋ก ๋๋์๊ฐ๋ ๊ฒฝ๋ก์ ์ต์๋น์ฉ์ ์ ์ฅํ๊ณ ์์ผ๋ฏ๋ก ๋ ๋นจ๋ฆฌ ๊ตฌํ ์ ์์.
โ

โ
๋๋์ฒด ์ด๋ฐ ์๊ฐ์ ๋๊ฐ ์ฒ์์ ์ด๋ป๊ฒ ํ ๊ฑด์ง ์ฐธ ๋๋จํ๋ค๋ ์๊ฐ...
//TCP psuedo
int TCP(int now, int visited)
{
๋ชจ๋ ์ฅ์ ๋ฐฉ๋ฌธ ์
return cost[now][0]
DP[now][visited] ์กด์ฌ ์
return DP[now][visited]
๋ ๋ค ์๋๋ฉด
for(int next=0 ~> n)
now ~> next ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด : continue
next๊ฐ ๋ฐฉ๋ฌธ ํ ๊ณณ์ด๋ฉด : continue
๋ชจ๋ ์๋๋ฉด
dp[next][visited์ next์ถ๊ฐ] + cost[now][next]
dp[now][visited] ์
๋ฐ์ดํธ
return dp[now][visited]
}
โ
'๐ง ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DFS ์๊ณ ๋ฆฌ์ฆ (0) | 2025.02.20 |
---|