1

こんにちは
、右手の原理で迷路を解くための教科書の演習を解いています

私はそれを扱うためにスイッチケースを使用します

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

右手の原理を機能させる簡単な方法があるかどうか知りたいですか?
座標系を変更する必要がありますが、実装できません

4

1 に答える 1

1

「もっと簡単な方法」に関する限り、この問題は再帰の最有力候補です。人々は再帰を最初は理解するのが少し難しいと感じることがよくありますが、最終的にはあなたが持っているものよりもはるかに簡単に理解できます. この質問への「関連」セクションには、役立つリンクがたくさんあります。少し前にそれを行うプログラムをlook()作成しました。一番下の関数が解決を行います。

于 2013-08-27T06:23:24.050 に答える