미로 찾기 알고리즘

1. Move
* 현재 위치가 유효한지 체크
   > 유효하지 않다면, 이전 위치로 돌아간다
* 현재 위치가 도착점인지 체크
   > 도착점이라면, 현재까지의 경로가 미로찾기의 해
* 현재 위치를 경로로 표시함
* 동서남북으로 이동해 봄(순서는 관계없음 - 다만 맵에 따라 순서가 해 찾는 속도에 영향을 끼칠 수 있음)
   * 동쪽으로 가 봄(Move 재귀)
   * 동쪽으로 가는 데 실패했다면, 서쪽으로 가 봄(Move 재귀)
   * 서쪽으로 가는 것도 실패했다면, 남쪽으로 가 봄(Move 재귀)
   * 남쪽으로 가는 것도 실패했다면, 북쪽으로 가 봄(Move 재귀)
   * 네 방향 모두 실패했다면, 현재 위치를 경로에서 제거하고(길로 변경하고) 이전 위치로 돌아간다

2. 현재 위치 유효성 체크
* 현재 위치가 미로 내인지, 벽이 아닌지, 갔던 길이 아닌지 체크
  > Yes 라면 유효함 / No 라면 유효하지 않음

미로의 시작점 부터 Move 를 시작하면, 미로찾기의 해를 얻을 수 있다.
시작점에서 출발 후 시작점으로 다시 돌아왔고 네 방향 모두 가는 것이 실패했다면 미로찾기의 해가 없는 것이다.

갈 수 있는 길이 있으면 무작정 계속 이동해보기 때문에 그래프의 깊이 탐색과 유사한 부분이 있다.

소스는 아래와 같다. 길기 때문에 접어 두었으며, 링크를 통해 코드 하이라이트된 소스를 참고할 수 있다.

소스 보기



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Heart