用右手原理解决迷宫问题

时间:2013-08-27 04:30:49

标签: c maze

你好 我正在解决一个用右手原则解决迷宫的教科书练习

我用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;
    }
}

我想知道是否有更简单的方法来制定右手原则? 我虽然改变了坐标系,但却无法实现它

1 个答案:

答案 0 :(得分:1)

就“更简单的方法”而言,这个问题是递归的主要候选者。人们经常发现递归有点难以掌握,但最终它比你拥有的要容易得多。这个问题的“相关”部分中有很多链接可能会有所帮助,我前一段时间写了a program to do it,底部的look()函数是解决问题的函数。