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