[๋ธ”๋กœ๊ทธ ์ด์ „]

2023.08.16

 

Traveling Salesman problem (TSP)

โ€‹

  1. ์ˆœํšŒ๋‹ˆ๊นŒ ์‹œ์ž‘์ ์ด ์–ด๋””๋“  ๊ฒฐ๊ณผ๋Š” ๊ฐ™์Œ โ‡จ A~>A ๋งŒ ๊ณ„์‚ฐ
  2. ๊ฒน์น˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ๋งŽ์Œ โ‡จ dp ์‚ฌ์šฉ
  3. 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

+ Recent posts