hdu 1035 简单题

/*
    2009-01-16 16:24:36    Accepted    1035    15MS    72K    1340 B    
    一道简单题
    给你一个起点,你按照矩阵中路径给出的指令走就是了,输出走的步数或者循环状态的步数
*/
#include
<iostream>
#include
<cstring>
#define N 12
int map[N][N];
int used[N][N];
int ct[N][N];
int tx[]={1,0,-1,0};
int ty[]={0,1,0,-1};
int r,c,s;
bool init()
{
    
char ch;
    
int tmp;
    scanf(
"%d%d%d",&r,&c,&s);
    
if(r==0 && c==0 && s==0)
        
return false;
    memset(used,
0,sizeof(used));
    memset(ct,
0,sizeof(ct));
    memset(map,
-1,sizeof(map));
    
for(int i=1;i<=r;i++)
    {
        getchar();
        
for(int j=1;j<=c;j++)
        {
            scanf(
"%c",&ch);
            
switch(ch)
            {
                
case 'S' : tmp=0;break;
                
case 'E' : tmp=1;break;
                
case 'N' : tmp=2;break;
                
case 'W' : tmp=3;break;
            }
            map[i][j]
=tmp;
        }
    }
    
return true;
}
void make()
{
    
int x=1,y=s,tmp=0,pre=0;
    ct[x][y]
=0;
    
while(map[x][y]!=-1 && !used[x][y])
    {
        ct[x][y]
=pre+1;
        pre
=ct[x][y];
        tmp
=map[x][y];
        used[x][y]
=1;
        x
+=tx[tmp];
        y
+=ty[tmp];
    }
    
if(map[x][y]==-1)
        printf(
"%d step(s) to exit\n",pre);
    
else
    
if(used[x][y]==1)
        printf(
"%d step(s) before a loop of %d step(s)\n",ct[x][y]-1,pre-ct[x][y]+1);
}
int main()
{
    
while(init())
    {
        make();
    }
    
return 0;
}
posted @ 2009-01-16 16:32  sunjian  阅读(697)  评论(3)    收藏  举报