HDU 1035 Robot Motion
一纯水题..... 直接深搜并记忆化加标记
#include<stdio.h>
#include<stdlib.h>
char map[1005][1005];
int des[1005][1005],m,n,s,f1,f2,inf = 0x7fffffff,dep[1005][1005],s1,s2,s3;
void DFS( int y,int x,int step )
{
if( des[y][x] )//若遇到回路
{
f2 = 1;
s2 = step;
s3 = dep[y][x];
return ;
}
if( f1 || map[y][x] < 0 )//若遇到边界
{
f1 = 1;
s1 = step;
return ;
}
des[y][x] = 1;
dep[y][x] = step;
if( map[y][x] == 'N' )
DFS( y - 1, x,step + 1 );
else if( map[y][x] == 'S' )
DFS( y + 1, x,step + 1 );
else if( map[y][x] == 'E' )
DFS( y,x+1,step+1 );
else DFS( y,x-1,step+1 );
return ;
}
int main( )
{
while( scanf( "%d%d",&n,&m ),m|n )
{
scanf( "%d%*c",&s );
f1 = f2 = 0;
for( int i = 0; i < 1005; ++i )//初始化 你懂得
for( int j = 0; j < 1005; ++j )
dep[i][j] = des[i][j] = 0,map[i][j] = -1;
for( int i = 1; i <= n; ++i )
{
for( int j = 1; j <= m; ++j )
scanf( "%c",&map[i][j] );
getchar( );
}
DFS( 1,s,0 );
if( f1 )
printf( "%d step(s) to exit\n",s1 );
else
printf( "%d step(s) before a loop of %d step(s)\n",s3,s2-s3 );
}
return 0;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号