๋๋ ๊ฑ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ์ถ์๊ฒ ์๋๋ผ ๊ฒ์์ ๋ง๋ค๊ณ ์ถ์๊ฑด๋ฐ
๋์ฒด ๋ช์ฃผ์งธ Astar ์ด์ง๋ ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค ์์ฑ๋๋ค ์ถ๋ค๊ฐ๋ ๋๋ค๋ฐฐ์ดํ๋ฉด ์ง๋๋๊ณ
๊ทผ๋ฐ ๋ฌธ์ ๋ ์ ํด์ง ๋งต์ด ์๋๋ผ ๋๋ค ๋งต์ด๋ผ๋ Astar ํ๋ก๊ฐ ์ธ์ํจ?
๋ ๋ฐ์๊ธ์ Evaluate ์ด์ฉ๊ณ ํจ์ ๋ด์ฉ๋ ํ๋ฒ ์ฌ๋ ค๋ณด์ธ์ฌ ๊ทธ๋ฆฌ๊ณ ์คํ๋ฆฌ์คํธ ๋งค๋ฒ์ํ ํ๋๊ฑฐ๋ณด๋จ priority queue๊ฐ์๊ฑฐ ์ฐ๋๊ฒ ์ข์๋ฏ
์ฌ๋ฆผ
ํ๋ก ์์ ์ข์. ๋ ์ด์ด๋ ๊ทธ๋ฆฌ๋ ์๋ง ํ์ฉํ๋ฉด ๊ณ๋จ๋ ๊ฐ๋ฅ
์ผ๋จ ์ด์ํด ๋ณด์ด๋๊ฑด ๊ธฐ์กด์ ์คํ๋ฆฌ์คํธ๋ณด๋ค ๋น ๋ฅธ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์๋ (newCostToNeighbour < validNeighbourNode.gCost) ๊ธฐ์กด์ openList์์ ๊ธฐ์กด๋ ธ๋๋ ๋นผ๊ณ ์๊ฑฐ๋ก ๊ต์ฒดํด์ค์ผํ๋๊ฑฐ ์๋๊น List๊ฐ ์ค๋ณต๋ฐฉ์ง๊ฐ ์๋๋๊ฑธ๋ฃจ์๋๋ฐ
๊ธฐ์กด ๋ ธ๋ popํด์ ๋บด์ค.
์ฝ๋์๋ ๋ฑํ ์๋ณด์ด๋๋ฏํ๋ ์๋๋ณด๋ค
์ pop์ ํ๊ฒ ์๋๋ผ ๊ฐ๋ง ๋ฐ๊ฟ๋ฃ์๋ค ใ ใ
๋๋ฒ์งธ๋ ๋งํ ์งํ์ movementpenalty๋ฅผ ์ด์ฉํด์ ๊ตฌ๋ถํ๊ณ ์ถ์ผ๋ฉด ๋งํ์งํ์ movementpenalty๊ฐ 0์ด์๋๋ผ ๊ต์ฅํ ๋์์์ฌ์ผ ํ๋๊ฑฐ ์๋๊น
๋ฌผ๋ก ์ด๋ฏธ Get๋ค์ด๋ฒ๊ฐ 0์ธ๊ฑฐ๋ฅผ ์ ์ด์ ๋ฆฌํด์ ์ํด์ค์ ์์ฒ๋ฆฌํด์ฃผ๊ณ ์๋๊ฑฐ ๊ฐ๊ธดํ์ง๋ง์๋
์ผ๋จ ์ข ๋ ๊ณ ๋ฏผํด๋ด. ์ง์ง ์ด๊ฑฐ ์๋๋ฉด ๊ฑ ์ค๋์ ๊ทธ๋ง๋๊ณ ๋ณด์คํจํด์ด๋ ๋ ๋ง๋ค์ด์ผ์ง
์ฅ์ ๋ฌผ์ด ๋งํ๊ฒ์ ๊ฒ๋ค์ด๋ฒ๊ฐ ์ด๋ฏธ ์๊ฑธ๋ฌ์ฃผ๊ณ ์์ผ๋ ํจ๋ํฐ ๊ฐ์ด ์ด๋ป๊ฒ ์ค์ ๋์ด์๋์ง๋ ๋ชฐ๋ผ๋ newCostToNeighbour์ ๊ฐ์์ movementPenaltyForGridSpace ์ด๊ฑฐ ์ผ๋จ ๋นผ๊ณ ํ๋ฒ ํด๋ณด๋๊ฒ๋ ์ข์๋ฏ
๋ด๊ฐ ์๋ ์ ์ด๋ฌ๋๋ฐ ใ ใ ใ ๊ทธ๋ฅ ์์ ์ฌ๋ผ ๋ธํ์ ์์ง๋ฅด๋ฉด ์ํด์