[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ์ตœ๋‹จ๊ฒฝ๋กœ ์ฐพ๊ธฐ (Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜)
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Algorithm 2020. 9. 20. 15:28

์ตœ๋‹จ ๊ฒฝ๋กœ ๊ทธ๋ž˜ํ”„์—์„œ ์œ ๋„๋˜๋Š” ๋ฌธ์ œ๋“ค ์ค‘ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„์—์„œ ํŠน์ • ์ •์ ์—์„œ ๋‹ค๋ฅธ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ(๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ๊ฒฝ๋กœ)๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋Š” ์ด์ „์˜ MST ๋ฌธ์ œ์™€ ๋‹ค๋ฅด๋‹ค. ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ MST์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ Prim(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‘์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. [MST] Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ vertice(์ •์ )๋Š” 3๊ฐ€์ง€ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค. tree vertice(T) : tree์— ์†ํ•ด ์žˆ๋Š” ์ •์  fringe vertice (F) : tree์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด์„œ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์ •์  unseen vertice (U) : ๋‚˜๋จธ์ง€ MST์—์„œ T์™€ F์˜ ์ •์  ์‚ฌ์ด์˜ ์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ„์† ๊ฐฑ์‹ ํ•ด์ฃผ์—ˆ๋˜ ๊ฒƒ ๋Œ€์‹ ์—, ์ตœ๋‹จ..

[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: MST (Prim/Dijkstra, Kruskal, ์‹œ๊ฐ„๋ณต์žก๋„)
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Algorithm 2020. 9. 20. 15:25

MST Spanning Tree : ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ ์šฐ์„  ํŠธ๋ฆฌ์˜ ์ •์˜๋Š” connected undirected acyclic graph (์—ฐ๊ฒฐ ๋น„๋ฐฉํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„)์ด๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์—ฐ๊ฒฐ๋˜์–ด์žˆ์œผ๋ฉฐ, ๋ฐฉํ–ฅ์„ฑ์€ ์—†๊ณ  ์ˆœํ™˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค. ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ค‘ ํŠน๋ณ„ํ•˜๊ฒŒ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ Spanning Tree๋ผ๊ณ  ํ•œ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด Spanning tree(์‹ ์žฅ ํŠธ๋ฆฌ)๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋ฉด์„œ ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€(์ตœ์†Œ ์—ฐ๊ฒฐ) ๊ทธ๋ž˜ํ”„์ด๋‹ค. ๊ฐ์ด ์•ˆ์˜จ๋‹ค๋ฉด ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž. ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์†Œํ•œ์˜ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ •์ ์„ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€..