LeeBlog

导航

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

posted on 2011-05-08 08:28  LeeBlog  阅读(238)  评论(0编辑  收藏  举报