2011-03-19 6 views
2

미로 해결 알고리즘에 문제가 있습니다. 왼손 규칙을 구현하려고합니다.Wall to maze solver

public Direction move(View v) { 
    if (!wallExistsToLeft(v)) { 
     turnLeft(); 
    } else if (v.mayMove(direction)) { 
     return direction; 
    } else if (!wallExistsToRight(v)){ 
     turnRight(); 
    } else { 
     turnAround(); 
    } 
    return direction; 
} 

방향은 항상 미로 해결자가 직면하고있는 현재 방향으로 설정됩니다.

turnX는 현재 이동 기능은 미로 해석이 그 방향으로 1 개 공간을 이동하는 방향을 돌려

향하고있는 방향에 따라 방향을 변경합니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까? 이 구현할 수있는 몇 가지 간단한 재귀 방법이 있지만 그것을 밖으로 작동하지 않을 수 있습니다 확신합니다.

현재 나는이 두 시험에 실패하고 있습니다 :

enter image description here

어떤 도움을 크게 감상 할 수있다.

답변

2

사진에서 항상 우회전 한 것처럼 보입니다.

코드에서 wallExistsToLeft (v)는 항상 true를 반환하고 v.mayMove (direction)은 항상 false를 반환 함을 나타냅니다.

0

왼편 규칙은 시작 및 목표가 벽의 동일한 연결 구성 요소의 벽 세그먼트 옆에있는 경우에만 적용됩니다. 한 가운데에 기둥이 있고 그 옆에 기둥이 있으면 그 주위를 항상 걸을 것입니다. 두 번째 문제는 열린 공간에서 발생합니다. 집착 할 벽이 없다면 알고리즘은 항상 원을 따라 걸을 것입니다. 보통 좁은 회랑이이 알고리즘을 제안 할 때 생각합니다. 구현이 올바른지 여부에 관계없이 단순한 왼손잡이 규칙으로 테스트 케이스를 전달할 수 없습니다.

관련 문제