可恶的模拟题,刚进入的那一步竟然不算,贡献了多次WA啊,只要注意这点应该就木有问题了。
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
int N, M, sx, sy;
char map[15][15], hash[15][15];
bool out( int x, int y )
{
if( x< 1|| x> N|| y< 1|| y> M )
{
return true;
}
return false;
}
bool DFS( int &step, int &loop, int x, int y, int s )
{
hash[x][y]= s;
if( map[x][y]== 'W' ) y-= 1;
else if( map[x][y]== 'E' ) y+= 1;
else if( map[x][y]== 'N' ) x-= 1;
else if( map[x][y]== 'S' ) x+= 1;
if( out( x, y ) )
{
step= s+ 1;
return true;
}
else
{
if( hash[x][y]== -1 )
{
return DFS( step, loop, x, y, s+ 1 );
}
else
{
step= hash[x][y];
loop= s- hash[x][y]+ 1;
return false;
}
}
}
int main( )
{
while( scanf( "%d %d", &N, &M ), N| M )
{
scanf( "%d", &sy );
int step, loop;
memset( hash, -1, sizeof( hash ) );
for( int i= 1; i<= N; ++i )
{
scanf( "%s", map[i]+ 1 );
}
if( DFS( step, loop, 1, sy, 0 ) )
{
printf( "%d step(s) to exit\n", step );
}
else
{
printf( "%d step(s) before a loop of %d step(s)\n", step, loop );
}
}
return 0;
}