A*๋Š” fย cost(์‹œ์ž‘์ ๋ถ€ํ„ฐ ํ˜„์žฌ ๋…ธ๋“œ๊นŒ์ง€์˜ ๋น„์šฉ + ํ˜„์žฌ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ชฉ์ ์ง€๊นŒ์ง€ ์˜ˆ์ƒ๋น„์šฉ)๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋“œ๋“ค์„ ์—ด๊ณ  ๋‹ซ์œผ๋ฉด์„œ ์ตœ์  ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„. ์ด๋ฅผ ์œ„ํ•ด์„œ ํ˜„์žฌ๋…ธ๋“œ, open set, close set์ด ํ•„์š”ํ•จ. ํ˜„์žฌ ๋…ธ๋“œ๋Š” ์ฒ˜์Œ์—๋Š” start node์ด๊ณ  ์ดํ›„ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ open set ์ค‘์—์„œ ๊ฐ€์žฅ fย cost๊ฐ€ ๋‚ฎ์€ ๋…ธ๋“œ๋กœ ๊ฒฐ์ •๋˜์•ผ ํ•จ.

(์ฐธ๊ณ ๋กœ ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„ open set์—์„œ close set์œผ๋กœ ๋„ฃ์–ด์•ผ ํ•จ) ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด(์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ.. ์ด ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ƒํ•˜ ์ขŒ์šฐ๋กœ ์›€์ง์ด๋Š” ๋“ฏ ํ•˜๋‹ˆ ์ƒํ•˜ ์ขŒ์šฐ์— ํ•ด๋‹นํ•˜๋Š” ๋…ธ๋“œ๋“ค) ํ•ด๋‹น ์ธ์ ‘ ๋…ธ๋“œ์˜ fย cost๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ fย cost๋Š” ํ˜„์žฌ๋…ธ๋“œ์˜ ์ถœ๋ฐœ์ ์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋น„์šฉ + ์ธ์ ‘๋…ธ๋“œ์˜ ๋ชฉ์ ๊นŒ์ง€์˜ ๋น„์šฉ์œผ๋กœ ๊ณ„์‚ฐํ•จย 

๊ทธ๋ฆฌ๊ณ  ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ open set์— ์ถ”๊ฐ€ํ•จ. ๊ทธ๋ฆฌ๊ณ  open set ์ค‘์—์„œ ๊ฐ€์žฅ fย cost๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ํ˜„์žฌ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•˜๋ฉด์„œ ๊ฒฝ๋กœ ์ €์žฅ์„ ์œ„ํ•ด ์ž์‹  ์ด์ „์˜ ํ˜„์žฌ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•จ(๊ธธ์ฐพ๊ธฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•จ) ์ด ๊ณผ์ •์„ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋ฉด ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด๋ก ์ž„..


open set์€ ๊ณ„์† ์—ด๋ฆฌ๊ณ  ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ f cost๊ฐ€ ๋‚ฎ์€๊ฑธ ๋‹ค์Œ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด์„œ open set์„ ๋˜ ์—ด๊ณ .. ํ•˜๋‹ค๋ณด๋ฉด ๊ธฐ์กด์— open set์— ์†ํ•œ ์• ๋“ค ์ค‘์—์„œ๋„ f cost๋ฅผ ์žฌ๊ณ„์‚ฐ ํ•˜๋ฉด์„œ f cost๊ฐ€ ๋‚ฎ์•„์ง€๋Š” ๋…ธ๋“œ๋“ค๋„ ์žˆ์Œย 



์˜ฌ๋ ค๋†“์€ ๋ฌธ์ œ์˜ ์ฝ”๋“œ์—์„œย ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ์ง€๋Š” ์ง์ ‘ ๊ตด๋ ค๋ณด๋ฉด์„œ ํ•ด๋ณด์ง€ ์•Š์œผ๋ฉด ์™„๋ฒฝํžˆ ์•Œ ์ˆ˜๋Š” ์—†๊ฒ ์ง€๋งŒ ์ผ๋‹จ goal๊นŒ์ง€์˜ ๋น„์šฉ์€ ์ง์„ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ• ๋ ค๊ณ  ํ–ˆ๋˜ ๊ฑฐ๋ฉด ์ œ๊ณฑ๊ทผ์„ ์ทจํ•ด์•ผํ–ˆ๊ณ , ์ƒํ•˜์ขŒ์šฐ๋กœ๋ฐ–์— ๋ชป์›€์ง์ด๋‹ˆ๊นŒ ์•„๋งˆ Math.pow๋ฅผ ์“ฐ๋ฉด ์•ˆ๋˜๊ณ  abs๋กœ ์ ˆ๋Œ€๊ฐ’์„ ๊ตฌํ•ด์„œ x y๋ฅผ ๋”ํ•˜๋Š”๊ฒŒย ๋งž์„๋“ฏ.ย 


(๊ธ€๊ณ  ์ฒ˜์Œ ๋…ธ๋“œ๋ฅผ ์˜คํ”ˆ์…‹์— ๋„ฃ์–ด๋†จ๊ธฐ๋–”์— calc() ํ˜ธ์ถœ ์ „์—AddProximityNode(startNode)๋Š” ํ•„์š”์—†์Œ.. )



์šฐ์„ ์ˆœ์œ„ ํ๋ง๊ณ  ๋ฆฌ์ŠคํŠธ๋กœ open set์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ทธ ์ค‘์—์„œ f cost๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋“œ๋ฅผ ๋‹ค์Œ ํ˜„์žฌ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด ์Šคํฌ๋ฆฝํŠธ์— ์—†๋„ค..

๊ธ€๊ณ  ์ธ์ ‘ ๋…ธ๋“œ๋“ค์˜ fย cost๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  open set์— ์ถ”๊ฐ€ํ•  ๋•Œ, ์ด๋ฏธ ๋‹ซํžŒ close set์— ์†ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๋Š” ๋ถ€๋ถ„์ด ์Šคํฌ๋ฆฝํŠธ์— ์—†๋‹ค. ์ด๋Ÿฌ๋ฉด ๋‹ซ์•„ ๋†“์€ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋„ ์žฌ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ ธ๋ฒ„๋ฆฐ๊ฑด ์ด ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ผ๊ฑฐ์ž„..



์š”์•ฝํ•˜๋ฉดย 




1.๋ชฉ์ ์ง€๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ ๋น„์šฉ์ด x์ฐจ์ด์˜ ์ œ๊ณฑ + y์ฐจ์ด์˜ ์ œ๊ณฑ์œผ๋กœ ์žกํ˜€์žˆ์–ด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ. ย  ย  ย  ย  ย  ย 



2. queue๋ฅผ ์ด์šฉํ•ด ๋“ค์–ด๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ popํ•˜์—ฌ a*์˜ ์ตœ๋‹จ๊ฒฝ๋กœ ๊ณ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด ์œ ์‹ค๋จ. queue๋ฅผ ์ด์šฉํ•˜๋ฉด a*๊ฐ€ ์•„๋‹ˆ๋ผ ํœด๋Ÿฌ์Šคํ‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๊ฐ€๊นŒ์šด ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ž„.. a*๋ฅผ ์›ํ•œ๋‹ค๋ฉด queue ๋ง๊ณ  list๋กœ open set์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋‹ค์Œ ํ˜„์žฌ๋…ธ๋“œ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ open set์— ์†ํ•œ ๋…ธ๋“œ ์ค‘ย f cost(์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ+๋„์ฐฉ์  ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ)๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋“œ๋ฅผย ๋‹ค์Œ ํ˜„์žฌ ๋…ธ๋“œ๋กœ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ.. foreach๋ฅผ ์ด์šฉํ•ด์„œ openset์— ์†ํ•œย ๋ชจ๋“  ๋…ธ๋“œ์ค‘ ๊ฐ€์žฅ fcost๊ฐ€ ๋‚ฎ์€ ๋…ธ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์Œ..


3. open set์—์„œ ๋ฝ‘์•„๋‚ธ(๊ทธ๋ฆฌ๊ณ  close set์— ์ถ”๊ฐ€ํ•œ) ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด fย cost๋ฅผ ์„ค์ •ํ•ด์ค€ ๋’ค ๊ทธ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์ด ์ด๋™๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ์ธ์ง€ ํ™•์ธํ•˜๊ณ  open set์— ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ,ย ย ์ดํ›„์— ๋‹ค์‹œ ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ ์—ฐ์‚ฐํ•  ๋•Œ close set์— ์†ํ•œ ์ธ์ ‘๋…ธ๋“œ๋“ค์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ณ„์‚ฐ ๋Œ€์ƒ์— ๋„ฃ๊ณ  ์žˆ์Œ. ์ด๋ฅผ ์ œ์™ธํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋ฏธ closeํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋„ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๊ฐ™์€ ์ž๋ฆฌ๋ฅผ ๋งด๋Œ๊ฒŒ ๋˜๋ฉฐ ๋ฌดํ•œ๋ฃจํ”„๋Š” ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•˜๋Š” ๋“ฏ..


์ผ๋‹จ ๋งํ•œ ๋ถ€๋ถ„ ์ˆ˜์ • ํ•ด๋ณด๊ณ  ๊ณ„์† ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค์‹œ ๋งํ•ด์ฃผ์…ˆ..ย