poj 1573 Robot Motion

一道简单的模拟题:

View Code
#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<algorithm>

#include<cmath>

#include<queue>

#include<set>

#include<vector>

using namespace std;

int judge( char map[][124], int visit[][124],int x ,int y ,int n , int m)

{ 

     if( x <1 || x >n || y < 1 || y > m )  return 2;

     if( visit[x][y]!=0 ) return 1;  

      return 0;

}

void DFS( char map[][124],int visit[][124],int n , int m , int x,int y )

{

    int t;

//    printf( "%c %d %d\n",map[x][y],x,y );

    switch( map[x][y] )

    {

       case 'S': t = judge( map , visit, x+1 ,y ,n ,m );

               if( t!=0 )

                {

                    if( t == 1 )

                    printf( "%d step(s) before a loop of %d step(s)\n",visit[x+1][y]-1,visit[x][y]+1-visit[x+1][y]  );

                    else printf( "%d step(s) to exit\n",visit[x][y] ); 

                }

                else 

                {

                    visit[x+1][y] = visit[x][y] + 1; 

                    DFS( map ,visit, n , m , x+ 1,y );

                }

                break;

      case 'N':t = judge( map , visit,  x-1 ,y , n, m );

                if( t!=0 )

                {

                    if( t == 1 )

                    printf( "%d step(s) before a loop of %d step(s)\n",visit[x-1][y]-1,visit[x][y] +1-visit[x-1][y]  );

                    else printf( "%d step(s) to exit\n",visit[x][y] );        

                } 

                else 

                {

                    visit[x-1][y] = visit[x][y] + 1;

                    DFS( map ,visit, n , m , x - 1,y );

                    

                }

                break;    

      case 'E': t= judge(  map , visit, x ,y+1 ,n,m);

               if( t!=0 )

                {

                if( t == 1 )

                    printf( "%d step(s) before a loop of %d step(s)\n",visit[x][y+1]-1,visit[x][y]+1 -visit[x][y+1]  );

                    else printf( "%d step(s) to exit\n",visit[x][y]  ); 

                }

                else

                {

                    visit[x][y+1] = visit[x][y] + 1;

                    DFS( map ,visit, n , m , x ,y + 1 );

                }

                break;    

      case 'W': t = judge( map , visit,  x ,y -1 ,n,m);

                if( t!=0 )

                {

                    if( t == 1 )

                    printf( "%d step(s) before a loop of %d step(s)\n",visit[x][y-1]-1,visit[x][y]+1-visit[x][y-1]  );

                    else printf( "%d step(s) to exit\n",visit[x][y]  );   

                }

                else 

                {

                    visit[x][y-1] = visit[x][y] + 1;

                    DFS( map ,visit, n , m , x ,y - 1 );

                }

                break;        

    }    

}

int main(  )

{

    char map[124][124];

    int n , m ,start;

    while( scanf( "%d %d %d",&n,&m,&start ),n||m||start )

    { 

        int visit[124][124] = {0};

        for( int i = 1 ; i <= n ; i ++ )

        {

            scanf( "%s",map[i] + 1 );    

        }

        visit[1][start] = 1;

        DFS( map ,visit, n , m , 1,start );

    }  

    //system( "pause" );

    return 0;

}

 

你可能感兴趣的:(robot)