你好 我正在解决一个用右手原则解决迷宫的教科书练习
我用switch case来处理它
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;
}
}
我想知道是否有更简单的方法来制定右手原则? 我虽然改变了坐标系,但却无法实现它
答案 0 :(得分:1)
就“更简单的方法”而言,这个问题是递归的主要候选者。人们经常发现递归有点难以掌握,但最终它比你拥有的要容易得多。这个问题的“相关”部分中有很多链接可能会有所帮助,我前一段时间写了a program to do it,底部的look()
函数是解决问题的函数。