오른손 법칙이란? 미로의 시작 점에서 오른손을 벽에 대고 이동하면서, 벽에서 손을 떼지 않고 계속 이동하는 방법이다.
알고리즘 :
[ 오른 방향 회전 → 시계 방향 ]
[ 왼 방향 회전 → 반 시계 방향]
현재 코드에서 제한 사항:
아래 코드에 대한 변수 설명:
//주요 오른손 법칙 알고리즘
//이동을 위한 UP/LEFT/DOWN/RIGHT 배열
int rows[4] = {-1,0,1,0};
int cols[4] = {0,-1,0,1};
while (pos != exitPos)
{
//오른쪽 방향 이동
if (cnt == (_board->GetSize() * _board->GetSize()))
break; //못나오는 경우, 게임 끝
int32 newDir = (D_COUNT + _dir - 1) % D_COUNT;
Pos nextRight =Pos{ make_pair(pos.pos.first + rows[newDir], pos.pos.second + cols[newDir])};
Pos nextUp = Pos{ make_pair(pos.pos.first + rows[_dir], pos.pos.second + cols[_dir]) };
if (CanGo(Pos{ nextRight }))
{
//오른쪽 비어있음 이동
_dir = newDir;
pos = nextRight;
_path.push_back(nextRight);
}
else if (CanGo(Pos{ nextUp }))
{
//직선 비어있음 이동
pos = nextUp;
_path.push_back(nextUp);
}
else
{
//왼쪽으로 회전
_dir = (_dir + 1) % D_COUNT;
}
cnt++;
}