こんにちは
、右手の原理で迷路を解くための教科書の演習を解いています
私はそれを扱うためにスイッチケースを使用します
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;
}
}
右手の原理を機能させる簡単な方法があるかどうか知りたいですか?
座標系を変更する必要がありますが、実装できません