HDU 1035 - Robot Motion

模拟他给的方向走,判断一个循环即可

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 int dx[5]={0,0,1,0,-1};
 5 int dy[5]={0,1,0,-1,0};
 6 char s[1000];
 7 int map[1000][1000];
 8 int flag[1000][1000];
 9 bool lop;
10 int n,m,k,x,y,t;
11 bool check(int const &x,int const &y)
12 {
13     return 0<=x&&x<n&&0<=y&&y<m; 
14 }
15 void walk(){
16     t=lop=x=0,y=k-1;
17     while(check(x,y))
18     {
19         if(flag[x][y]){
20             lop=1; break;
21         }
22         flag[x][y]=++t;
23         int tmp=x;
24         x+=dx[map[x][y]];
25         y+=dy[map[tmp][y]];
26 //        cout<<x<<y<<endl;
27     }
28     if(lop){
29         printf("%d step(s) before a loop of %d step(s)\n",flag[x][y]-1,1+t-flag[x][y]);    
30     } else {
31         printf("%d step(s) to exit\n",t);
32     }
33 }
34 int main()
35 {
36     while(~scanf("%d%d",&n,&m),(n+m))
37     {
38         scanf("%d",&k);
39         for(int i=0;i<n;i++)
40         {
41             scanf("%s",&s);
42             for(int j=0;j<m;j++)
43             {
44                 if(s[j]=='E') map[i][j]=1;
45                 else if(s[j]=='S') map[i][j]=2;
46                 else if(s[j]=='W') map[i][j]=3;
47                 else map[i][j]=4;
48             }
49         }
50         memset(flag,0,sizeof(flag));
51         walk();
52     }
53 }

 

posted @ 2016-04-29 18:00  nicetomeetu  阅读(121)  评论(0编辑  收藏  举报