[英]solve maze by right hand principle
你好
我正在解決一個教科書練習,以右手原則解決迷宮
我用開關盒來處理
switch ( face )
{
case face_EAST:
{
if( map[x][y + 1] == '.' && map[x + 1][y] == '#' )
{
y = y + 1;
gotoxy(x, y);
face = face_EAST;
}
else if ( map[x - 1][y] == '.' && map[x][y + 1] == '#' )
{
x = x - 1;
gotoxy( x, y );
face = face_NORTH;
}
else if ( map[x + 1][y] == '.' && map[x + 1][y - 1] == '#' )
{
x = x + 1;
gotoxy( x, y );
face = face_SOUTH;
}
else
face = face_SOUTH;
break;
}
case face_SOUTH :
{
if( map[x + 1][y] == '.' && map[x][y - 1] == '#' )
{
x = x + 1;
gotoxy( x, y );
face = face_SOUTH;
}
else if( map[x][y - 1] == '.' && map[x - 1][y - 1] == '#' )
{
y = y - 1;
gotoxy( x, y );
face = face_WEST;
}
else if( map[x][y + 1] == '.' && map[x + 1][y] == '#' )
{
y = y + 1;
gotoxy( x, y );
face = face_EAST;
}
else
face = face_WEST;
break;
}
case face_WEST:
{
if( map[x][y - 1] == '.' && map[x - 1][y] == '#' )
{
y = y - 1;
gotoxy( x, y );
face = face_WEST;
}
else if( map[x - 1][y] == '.' && map[x - 1][y + 1] == '#' )
{
x = x - 1;
gotoxy( x, y );
face = face_NORTH;
}
else if( map[x + 1][y] == '.' && map[x][y - 1] == '#' )
{
x = x + 1;
gotoxy( x, y );
face = face_SOUTH;
}
else if( map[x][y + 1] == '.' && map[x + 1][y] == '#' )
{
y = y + 1;
gotoxy( x, y );
face = face_EAST;
}
else if( map[x - 1][y] == '.' && map[x - 1][y + 1] == '#' )
{
x = x - 1;
gotoxy( x, y );
face = face_NORTH;
}
else
face = face_NORTH;
break;
}
case face_NORTH:
{
if( map[x - 1][y] == '.' && map[x][y + 1] == '#' )
{
x = x - 1;
gotoxy( x, y );
face = face_NORTH;
}
else if( map[x][y - 1] == '.' && map[x - 1][y] == '#' )
{
y = y - 1;
gotoxy( x, y );
face = face_WEST;
}
else if( map[x][y + 1] == '.' && map[x + 1][y + 1] == '#' )
{
y = y + 1;
gotoxy( x, y );
face = face_EAST;
}
else
face = face_EAST;
break;
}
}
我想知道是否還有更簡單的方法可以使右手原理起作用?
我必須更改坐標系,但無法實現
就“更簡單的方法”而言,此問題是遞歸的主要候選對象。 剛開始時,人們通常覺得遞歸有點難,但是最終變得比您所擁有的要容易得多。 這個問題的“相關”部分中有很多鏈接可能會有所幫助,而我前一段時間編寫了一個程序來執行此操作 ,最下面的look()
函數就是解決問題的程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.