Recursion 응용 - 미로찾기

리커시브하게 생각해보자.
현재 위치에서 출구까지 가는 경로가 있으려면
현재 위치가 출구이거나 혹은
이웃한 셀들 중 하나에서 현재 위치를 지나지 않고 출구까지 가는 경로가 있거나
Decision Problem
답이 yes or no 인 문제
출구까지 가는 경로가 있니 없니
boolean findPath(x, y)
// 1) 현재 위치가 출구거나
if (x, y) is the exit
return true;
// 2)
else
// x,y에 이웃한 인접한 셀(최대 4개) 각각에 대해
for each neighbouring cell (x', y') of (x,y) do
// wall이 아닌 길이라면
if (x', y') is on the pathway
// 이 길에 대해서 다시 findPath
if findPath(x', y')
return true
return false;Recursion 을 작성시 기본적으로 고려할 것
무한루프에 빠지지 않는가
자기 자신을 계속 호출하기 때문에
recursion 은 basecase 로 수렴한다 를 성립시켜야함
사실 위 findPath 는 무한루프에 빠질 가능성 있음
(x,y)가 (x', y')로 갈 경우 (x' = x + 1, y' = y)
(x' -1, y)를 리커젼으로 돌 경우 계속 반복됨
해결책은?
visited 변수로 방문 여부 관리
basecase
(x,y)가
벽이거나
방문했거나
출구라면
코드 짜보자
북,동,남,서로 이동할 때 움직인 경로
Last updated
Was this helpful?