막다른 골목에 도달했을 때 프로그래밍 방식으로 미로를 통과하는 방법

StackOverflow https://stackoverflow.com/questions/40413

문제

미로를 통과하여 앞으로 이동하는 것은 매우 쉽지만 막다른 골목에 도달한 후 너무 멀리 돌아가지 않고 미로를 통해 백업하여 새로운 경로를 시도하는 방법을 알 수 없는 것 같습니다.

도움이 되었습니까?

해결책

사용 역추적 이전 방향 결정의 스택을 유지함으로써.

다른 팁

(구현하기 위한) 가장 간단한 알고리즘은 역추적을 통해 해당 정보가 제공되지 않는 한, 귀하가 가본 위치와 각 위치에서 이동한 경로의 스택을 유지하는 것입니다.

돌아가려면 스택에서 이전 위치를 꺼내고 테스트되지 않은 출구가 있는 이전 위치를 찾을 때까지 해당 위치에서 더 많은 출구를 확인하세요.

매번 동일한 순서로 지속적으로 출구를 테스트함으로써 특정 위치로의 역추적은 아래(예:지난번에 내려갔던 이전 위치에 있었음) 그런 다음 다음 방향을 선택하기만 하면 됩니다. 아래에.

나는 당신이 무슨 뜻인지 완전히 확신하지 못합니다 너무 멀리 돌아가는 중 하지만 나는 당신이 테스트되지 않은 경로가 있는 이전 장소로 돌아가고 싶어할 것이라고 생각합니다. 그것이 당신이 원하는 것이 아닙니까?

시작 지점에서 현재 위치까지의 경로를 추적하고 새 경로를 찾으려고 할 때 해당 사각형을 피하지 않으면 결국 원형으로 이동하게 되어 결국 스택이 너무 커질 수 있습니다.

이동하는 경로를 표시하고 표시된 영역에 절대 들어가지 않는 간단한 재귀 방법을 사용하면 쉽게 이 작업을 수행할 수 있습니다.

또한, 귀하의 경우 물건 미로를 통해 이동하는 것은 단순히 이동하고 벽에 부딪히는(멈추는) 것보다 약간 더 똑똑합니다. 현재 지점에서 모든 방향을 볼 수 있다는 점에서 도움이 될 수 있는 다른 알고리즘이 있습니다.

Eric Lippert는 다음과 같은 일련의 기사를 작성했습니다. A*의 C# 구현, 이는 더 효율적일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top