๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

[์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra) ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋‹ค์ต์ŠคํŠธ๋ผ(dijkstra) ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

9taetae9 2024. 10. 31. 15:58
728x90

์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜๋ฏธํ•œ๋‹ค.

๋‹ค์–‘ํ•œ ๋ฌธ์ œ ์ƒํ™ฉ

 - ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ํ•œ ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ

 - ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ

 - ๋ชจ๋“  ์ง€์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ

๊ฐ ์ง€์ ์€ ๊ทธ๋ž˜ํ”„์—์„œ ๋…ธ๋“œ๋กœ ํ‘œํ˜„

์ง€์  ๊ฐ„ ์—ฐ๊ฒฐ๋œ ๋„๋กœ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„

 

๋‹ค์–‘ํ•œ ๋ฌธ์ œ ์ƒํ™ฉ ์ค‘ ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ƒํ™ฉ์€ ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์Œ์˜ ๊ฐ„์„ ์ด ์—†์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 - ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋„๋กœ(๊ฐ„์„ )์€ ์Œ์˜ ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์— ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

 - ๋งค ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ด ์ž„์˜์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

๋™์ž‘ ๊ณผ์ •

1. ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ ์„ค์ •

2. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™”

 - ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌดํ•œ์œผ๋กœ, ์ž๊ธฐ ์ž์‹ ์€ 0(์ž๊ธฐ ์ž์‹ ์—์„œ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ์ตœ์†Œ ๋น„์šฉ)์œผ๋กœ ์„ค์ •

3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒ => ๊ทธ๋ฆฌ๋””

4. ์„ ํƒํ•œ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ 

3, 4๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณต(๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋  ๋•Œ๊นŒ์ง€)

 

3๋ฒˆ ๊ณผ์ •์—์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ?

๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์ค‘ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ–ˆ๊ธฐ์—, ์„ ํƒ๋œ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ๋” ์ด์ƒ ๋ฐ”๋€Œ์ง€ ์•Š์•„์„œ

์ฆ‰, ๋งค๋ฒˆ ํ˜„์žฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•  ๋•Œ๋งˆ๋‹ค, ํŠน์ • ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ํ™•์‹คํžˆ ๊ฒฐ์ •ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ๊ณผ์ •์„ ํ†ตํ•ด ์šฐ๋ฆฌ๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ถœ๋ฐœ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์ด๋‹ค.

 

์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ณ„๋„์˜ ๋กœ์ง์ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. => (์ถ”ํ›„ ํ•™์Šต)

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘๊ณผ์ •์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์€ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ˜„์žฌ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋” ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์œผ๋ฉด ์ด๋ฅผ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ถœ๋ฐœ๋…ธ๋“œ์—์„œ A ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฒ˜์Œ์— 8๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์— ์ €์žฅํ–ˆ๋‹ค๊ณ  ํ•˜์ž.

์ดํ›„ ์ถœ๋ฐœ๋…ธ๋“œ์—์„œ B(๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ)๋ฅผ ์„ ํƒํ•˜๊ณ 

(์ถœ๋ฐœ๋…ธ๋“œ์—์„œ B๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋Š” 5) + (B ๋…ธ๋“œ์—์„œ A๋…ธ๋“œ ๊นŒ์ง€ ๊ฑฐ๋ฆฌ 5)๋ผ๋ฉด  ์ถœ๋ฐœ๋…ธ๋“œ์—์„œ ๋…ธ๋“œ B๋ฅผ ๊ฑฐ์ฒ˜ A๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๊ธธ์ด(7)๊ฐ€

์ด์ „์— ๊ฐฑ์‹ ํ–ˆ๋˜ 8๋ณด๋‹ค ์งง์œผ๋ฏ€๋กœ, ์ถœ๋ฐœ ๋…ธ๋“œ์—์„œ A ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์—์„œ 7๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

 

์˜ˆ์‹œ)

์ถœ๋ฐœ : 1๋ฒˆ ๋…ธ๋“œ

๋…ธ๋“œ ๋ฒˆํ˜ธ 1 2 3 4 5 6
๊ฑฐ๋ฆฌ  0 ๋ฌดํ•œ ๋ฌดํ•œ ๋ฌดํ•œ  ๋ฌดํ•œ ๋ฌดํ•œ

 

Step 1) ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ์ธ 1๋ฒˆ ๋…ธ๋“œ ์„ ํƒ

1๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 2,3,4 ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ =>์‹œ์ž‘ ์ง€์ ์ด 1๋ฒˆ์ด๋ฏ€๋กœ 1๋ฒˆ ๋…ธ๋“œ์—์„œ 1๋ฒˆ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ 2,3,4 ๋…ธ๋“œ๋กœ ๊ฐ„๋‹ค๋Š” ๊ฒƒ

์‹œ์ž‘๋…ธ๋“œ(1๋ฒˆ)์—์„œ 2,3,4๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ vs ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ 1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ 0 + 1๋ฒˆ๋…ธ๋“œ ๊ฑฐ์ฒ˜ 2,3,4 ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ 

์ธ์ ‘ ๋…ธ๋“œ ํ˜„์žฌ๊ฐ’ ๊ฑฐ์ฒ˜๊ฐˆ ๊ฒฝ์šฐ ๊ฐฑ์‹  ์—ฌ๋ถ€
2 ๋ฌดํ•œ 0 + 2 True
3 ๋ฌดํ•œ  0 + 5 True
4 ๋ฌดํ•œ 0 + 1 True

์ง€๊ธˆ์€ ํ˜„์žฌ ๊ฐ’์ด ๋ชจ๋‘ ๋ฌดํ•œ์ด๋ฏ€๋กœ ์‹œ์ž‘๋…ธ๋“œ์—์„œ 1๋ฒˆ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ฒ˜ 2,3,4๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ์งง์œผ๋ฏ€๋กœ ์ตœ๋‹จ ๊ฒฝ๋กœ ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

๋…ธ๋“œ ๋ฒˆํ˜ธ 1 2 3 4 5 6
๊ฑฐ๋ฆฌ  0 2 5 1 ๋ฌดํ•œ ๋ฌดํ•œ

 

ํ•œ๋ฒˆ ์ฒ˜๋ฆฌํ•œ 1๋ฒˆ ๋…ธ๋“œ๋Š” ๋” ์ด์ƒ ์„ ํƒ x (๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ) => ์—ฌ๊ธฐ์„  ํšŒ์ƒ‰์œผ๋กœ ํ‘œํ˜„

Step 2) ์•„์ง ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ 4๋ฒˆ ๋…ธ๋“œ ์„ ํƒ

4๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 3, 5๋ฒˆ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๊ฑฐ๋ฆฌ ๋น„๊ต

ํ˜„์žฌ ์‹œ์ž‘๋…ธ๋“œ(1๋ฒˆ)์—์„œ 3, 5๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ vs ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ 4๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ + 4๋ฒˆ๋…ธ๋“œ ๊ฑฐ์ฒ˜ 3,5๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ 

์ธ์ ‘ ๋…ธ๋“œ ํ˜„์žฌ๊ฐ’ ๊ฑฐ์ฒ˜๊ฐˆ ๊ฒฝ์šฐ ๊ฐฑ์‹  ์—ฌ๋ถ€
3 5 1 + 3 True
5 ๋ฌดํ•œ  1 + 1 True

4 ๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ฒ˜๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ˜„์žฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๊ฐ’๋“ค ๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ๋‘ ๋…ธ๋“œ ๋ชจ๋‘ ๊ฐฑ์‹ 

๋…ธ๋“œ ๋ฒˆํ˜ธ 1(visited) 2 3 4 5 6
๊ฑฐ๋ฆฌ  0 2 4 1 2 ๋ฌดํ•œ

 

4๋ฒˆ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ

step 3) ์•„์ง ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ 2๋ฒˆ ๋…ธ๋“œ ์„ ํƒ (2, 5๋ฒˆ ๋…ธ๋“œ ๋‘˜๋‹ค ๊ฑฐ๋ฆฌ๊ฐ€ 2์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆํ˜ธ ์ž‘์€ 2 ์„ ํƒ)

2๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 3, 4๋ฒˆ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๊ฑฐ๋ฆฌ ๋น„๊ต (4๋ฒˆ ๋…ธ๋“œ๋Š” ์ด๋ฏธ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ์ด๋ฏ€๋กœ Skip ๊ฐ€๋Šฅ)

ํ˜„์žฌ ์‹œ์ž‘๋…ธ๋“œ(1๋ฒˆ)์—์„œ 3, 4๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ vs ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ 2๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ + 2๋ฒˆ๋…ธ๋“œ ๊ฑฐ์ฒ˜ 3,4๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ 

์ธ์ ‘ ๋…ธ๋“œ ํ˜„์žฌ๊ฐ’ ๊ฑฐ์ฒ˜๊ฐˆ ๊ฒฝ์šฐ ๊ฐฑ์‹  ์—ฌ๋ถ€
3 4 2 + 3 False
4 1 2 + 2 False

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ๋” ์ž‘์œผ๋ฏ€๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์Œ

๋…ธ๋“œ ๋ฒˆํ˜ธ 1(visited) 2 3 4(visited) 5 6
๊ฑฐ๋ฆฌ  0 2 4 1 2 ๋ฌดํ•œ

 

2๋ฒˆ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ

step 4) ์•„์ง ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ 5๋ฒˆ ๋…ธ๋“œ ์„ ํƒ

5๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 3, 6๋ฒˆ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๊ฑฐ๋ฆฌ ๋น„๊ต 

ํ˜„์žฌ ์‹œ์ž‘๋…ธ๋“œ(1๋ฒˆ)์—์„œ 3, 6๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ vs ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ 5๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ + 5๋ฒˆ๋…ธ๋“œ ๊ฑฐ์ฒ˜ 3,6๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ 

์ธ์ ‘ ๋…ธ๋“œ ํ˜„์žฌ๊ฐ’ ๊ฑฐ์ฒ˜๊ฐˆ ๊ฒฝ์šฐ ๊ฐฑ์‹  ์—ฌ๋ถ€
3 4 2 + 1 True
6 1 2 + 2 True

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ˜„์žฌ๊ฐ’๋ณด๋‹ค 5๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ๊ฐˆ ๊ฒฝ์šฐ๊ฐ€ ์งง์œผ๋ฏ€๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ๊ฐฑ์‹ 

๋…ธ๋“œ ๋ฒˆํ˜ธ 1(visited) 2(visited) 3 4(visited) 5 6
๊ฑฐ๋ฆฌ  0 2 3 1 2 4

 

5๋ฒˆ ๋…ธ๋“œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

step 5) ์•„์ง ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ 3๋ฒˆ ๋…ธ๋“œ ์„ ํƒ

3๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 2, 6๋ฒˆ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๊ฑฐ๋ฆฌ ๋น„๊ต (2๋ฒˆ ๋…ธ๋“œ๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์—ˆ์œผ๋ฏ€๋กœ Skip ๊ฐ€๋Šฅ)

ํ˜„์žฌ ์‹œ์ž‘๋…ธ๋“œ(1๋ฒˆ)์—์„œ 2, 6๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ vs ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ 3๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ๋ฆฌ + 3๋ฒˆ๋…ธ๋“œ ๊ฑฐ์ฒ˜ 2,6๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ 

์ธ์ ‘ ๋…ธ๋“œ ํ˜„์žฌ๊ฐ’ ๊ฑฐ์ฒ˜๊ฐˆ ๊ฒฝ์šฐ ๊ฐฑ์‹  ์—ฌ๋ถ€
2 2 3 + 3 False
6 4 3 + 5 False

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ๋” ์ž‘์œผ๋ฏ€๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์Œ

๋…ธ๋“œ ๋ฒˆํ˜ธ 1(visited) 2(visited) 3 4(visited) 5(visited) 6
๊ฑฐ๋ฆฌ  0 2 3 1 2 4

 

step 6) ์•„์ง ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ 6๋ฒˆ ๋…ธ๋“œ ์„ ํƒ => ์‚ฌ์‹ค์ƒ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ด๋ฏ€๋กœ Skip ํ•ด๋„ ๋จ

์ด๋ฏธ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋˜๋ฉด์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ๊ณ ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

6๋ฒˆ์„ ๊ฑฐ์ฒ˜ ๊ฐˆ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๊ฐฑ์‹ ํ•  ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ๋„ ํ•˜๋‹ค.(์ธ์ ‘ ๋…ธ๋“œ ์žˆ์–ด๋„ ์ด๋ฏธ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋œ ๋…ธ๋“œ๋“ค์ด๋ฏ€๋กœ ๊ฐฑ์‹  ์•ˆ๋จ)

๋…ธ๋“œ ๋ฒˆํ˜ธ 1(visited) 2(visited) 3(visited) 4(visited) 5(visited) 6
๊ฑฐ๋ฆฌ  0 2 3 1 2 4

 

์ด๋ ‡๊ฒŒ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์ด ์™„์„ฑ ๋˜์—ˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์ด ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ์‹œ์ž‘ ๋…ธ๋“œ(1๋ฒˆ)์œผ๋กœ ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋“ค๊นŒ์ง€์˜ ๊ฐ๊ฐ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•œ ๊ฒƒ์ด ๋œ๋‹ค. 

 

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋งค ์ƒํ™ฉ์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ด ์ž„์˜์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉฐ ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ๊ณ ์ •๋˜์–ด ๋” ์ด์ƒ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

 - ํ•œ ๋‹จ๊ณ„๋‹น ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ํ™•์‹คํžˆ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•œ ๋’ค์— ํ…Œ์ด๋ธ”์— ๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค.

 - ์™„๋ฒฝํ•œ ํ˜•ํƒœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์  ๊ธฐ๋Šฅ์ด ํ•„์š”

 

 

๊ตฌํ˜„์— ํ•„์š”ํ•œ ์š”์†Œ ๋ฐ ๊ตฌํ˜„

private static final int INF = Integer.MAX_VALUE; //

int N; // ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

int[][] graph;   // ๊ฐ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” 2์ฐจ์› ๋ฐฐ์—ด

bool[] vsitied; // ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ธ์ง€ ์ฒดํฌํ•˜๋Š” ๋ฐฐ์—ด 

 

int[] d;             // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”

 

// n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
public Dijkstra(int n) {
    this.N = n;
    this.graph = new int[N][N];
    this.visited = new boolean[N];
    this.distance = new int[N];

    // ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (i == j) {
                graph[i][j] = 0;  // ์ž๊ธฐ ์ž์‹ ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ๋Š” 0
            } else {
                graph[i][j] = INF;  // ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ์˜ ๊ฑฐ๋ฆฌ๋Š” ๋ฌดํ•œ๋Œ€๋กœ ์ดˆ๊ธฐํ™”
            }
        }
    }
}
// ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜
private int getSmallestNode() {
    int min = INF;
    int index = 0;

    for (int i = 0; i < N; i++) {
        if (!visited[i] && distance[i] < min) {
            min = distance[i];
            index = i;
        }
    }
    return index;
}

 

// ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
public void dijkstra(int start) {
    // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
    for (int i = 0; i < N; i++) {
        distance[i] = graph[start][i];
    }

    // ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    visited[start] = true;

    // ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ N-1๊ฐœ์˜ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต
    for (int i = 0; i < N - 1; i++) {
        // ํ˜„์žฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด์„œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        int current = getSmallestNode();
        visited[current] = true;

        // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์„ ํ™•์ธ
        for (int j = 0; j < N; j++) {
            if (!visited[j]) {
                // ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ ๊ฐฑ์‹ 
                if (graph[current][j] != INF &&
                        distance[current] + graph[current][j] < distance[j]) {
                    distance[j] = distance[current] + graph[current][j];
                }
            }
        }
    }
}

 

 

์„ฑ๋Šฅ

V : ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ 

์ด O(V)๋ฒˆ์— ๊ฑธ์ณ์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ๋งค๋ฒˆ ์„ ํ˜• ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V^2)์ด๋‹ค.

 

Java์—์„œ 1์ดˆ ๋™์•ˆ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” ๋Œ€๋žต 5 * 10^7์ด๋ผ ํ•œ๋‹ค.

O(v^2) ๋ณต์žก๋„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ, ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” v^2์— ๋น„๋ก€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
v^2 โ‰ค 5 * 10^7
v โ‰ค7071.07xx
๊ฒฐ๋ก 
Java์—์„œ O(v^2) ๋ณต์žก๋„์˜ ์ฝ”๋“œ๋ฅผ 1์ดˆ ์•ˆ์— ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด, v์˜ ์ตœ๋Œ€๊ฐ’์€ ๋Œ€๋žต 7000์ด๋‹ค.

 

V(์ „์ฒด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜)๊ฐ€ 5000 ์ดํ•˜๋ผ๋ฉด ํ•ด๋‹น ์ฝ”๋“œ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ 10000๊ฐœ๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๋ฌธ์ œ์ผ ๊ฒฝ์šฐ 10000ยฒ = 100,000,000 (1์–ต) ์—ฐ์‚ฐ ์š”๊ตฌ => ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐœ์ƒ 

=> ์ด ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด๋ณด์ž.

 

์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) : ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์‚ญ์ œ

์Šคํƒ(Stack) : ๊ฐ€์žฅ ๋‚˜์ค‘์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ ๊ฐ€์ • ๋จผ์ € ์‚ญ์ œ

ํ(Queue) : ๊ฐ€์žฅ ๋จผ์ € ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ ๊ฐ€์žฅ ๋จผ์ € ์‚ญ์ œ

 

Java PriorityQueue์˜ ์ฃผ์š” ์‹œ๊ฐ„๋ณต์žก๋„

  1. ์‚ฝ์ž…(offer/add): O(log N)
  2. ์‚ญ์ œ(poll/remove): O(log N)
  3. ์ตœ์†Ÿ๊ฐ’/์ตœ๋Œ“๊ฐ’ ํ™•์ธ(peek): O(1)

์šฐ์„  ์ˆœ์œ„ ํ ์‚ฌ์šฉํ•œ ์ตœ์ ํ™”๋œ ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

private static final int INF = Integer.MAX_VALUE;
private int N;  // ๋…ธ๋“œ ๊ฐœ์ˆ˜
private List<List<Node>> graph;  // ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„
private int[] distance;  // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด
  • 2์ฐจ์› ๋ฐฐ์—ด โ†’ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(List<List<Node>>)
  • ๊ณต๊ฐ„๋ณต์žก๋„: O(Vยฒ) โ†’ O(V + E)
  • ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐ„์„ ๋งŒ ์ €์žฅํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 
private static final int INF = Integer.MAX_VALUE;
private int N;  // ๋…ธ๋“œ ๊ฐœ์ˆ˜
private List<List<Node>> graph;  // ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„
private int[] distance;  // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด
// ๋…ธ๋“œ ํด๋ž˜์Šค ์ •์˜
private static class Node implements Comparable<Node> {
    int index;
    int distance;

    Node(int index, int distance) {
        this.index = index;
        this.distance = distance;
    }

    @Override
    public int compareTo(Node other) { // ๋‹ค๋ฅธ Node ๊ฐ์ฒด์™€ ๋น„๊ต
        return Integer.compare(this.distance, other.distance); // ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ต
    }
    // - ์Œ์ˆ˜(-1): this.distance < other.distance
    // - 0: this.distance == other.distance
    // - ์–‘์ˆ˜(1): this.distance > other.distance
}

compareTo ๋ฉ”์„œ๋“œ : ์šฐ์„ ์ˆœ์œ„ ํ(PriorityQueue)์—์„œ ๋…ธ๋“œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ด compareTo ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐ˜ํ™˜

O(Vยฒ)์—์„œ O(E log V)๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ฐœ์„ 

public OptimizedDijkstra(int n) {
    this.N = n;
    this.distance = new int[N];

    // ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
    this.graph = new ArrayList<>();
    for (int i = 0; i < N; i++) {
        graph.add(new ArrayList<>());
    }
}

 

// ๊ฐ„์„  ์ •๋ณด ์ถ”๊ฐ€
public void addEdge(int from, int to, int weight) {
    graph.get(from).add(new Node(to, weight));
    // ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ธ ๊ฒฝ์šฐ ์•„๋ž˜ ์ค„ ์ถ”๊ฐ€
    // graph.get(to).add(new Node(from, weight));
}

 

public void dijkstra(int start) {
    // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
    Arrays.fill(distance, INF);
    distance[start] = 0;

    // ์šฐ์„ ์ˆœ์œ„ ํ ์ƒ์„ฑ
    PriorityQueue<Node> pq = new PriorityQueue<>();
    pq.offer(new Node(start, 0));

    while (!pq.isEmpty()) {
        Node current = pq.poll();
        int currentIndex = current.index;
        int currentDistance = current.distance;

        // ํ˜„์žฌ ๊ฑฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์ €์žฅ๋œ ๊ฑฐ๋ฆฌ๋ณด๋‹ค ํฌ๋ฉด ์Šคํ‚ต
        if (currentDistance > distance[currentIndex]) continue;

        // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค ํƒ์ƒ‰
        for (Node next : graph.get(currentIndex)) {
            int cost = currentDistance + next.distance;

            // ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ ๊ฐฑ์‹ 
            if (cost < distance[next.index]) {
                distance[next.index] = cost;
                pq.offer(new Node(next.index, cost));
            }
        }
    }
}

 

public static void main(String[] args) {
    // ์˜ˆ์‹œ: 6๊ฐœ ๋…ธ๋“œ์˜ ๊ทธ๋ž˜ํ”„
    OptimizedDijkstra graph = new OptimizedDijkstra(6);

    // ๊ฐ„์„  ์ •๋ณด ์ถ”๊ฐ€
    graph.addEdge(0, 1, 4);
    graph.addEdge(0, 2, 2);
    graph.addEdge(1, 2, 1);
    graph.addEdge(1, 3, 5);
    graph.addEdge(2, 3, 8);
    graph.addEdge(2, 4, 10);
    graph.addEdge(3, 4, 2);
    graph.addEdge(3, 5, 6);
    graph.addEdge(4, 5, 3);

    // ๋…ธ๋“œ 0์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰
    graph.dijkstra(0);

    // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    graph.printResult();
}

 

์ฐธ๊ณ  ์ž๋ฃŒ 

https://youtu.be/acqm9mM1P6o?si=pQeYbNvNx1xmg2Jw

 

728x90