POJ1573 Robot Motion 模拟水题

http://poj.org/problem?id=1573

题意:给定一个初始位置,让其在迷宫里走,看是否能走出。能走出就输出所走的步数,否则输出进入循环之前的步数和循环的步数。

思路:用If模拟所走的路线,用for语句,最多走n*m步,如果走出迷宫范围就break。否则,用map数组记录所走的步数,表示是否走过。当map!=0时,就走出循环。

具体看代码。

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<algorithm>
  4 #include<cstring>
  5 using namespace std;
  6 char a[15][15];
  7 int map[15][15];
  8 main()
  9 {
 10     int n,m,t,q,w,ans,e,an,i;
 11     while(scanf("%d%d%d",&n,&m,&t)!=EOF&&(n!=0||m!=0||t!=0))
 12     {
 13         memset(map,0,sizeof(map));
 14         for(i=0;i<n;i++)
 15         {
 16             scanf("%s",a[i]);
 17         }
 18         q=0;w=t-1;
 19         ans=1;
 20         map[0][t-1]=1;
 21         e=0;
 22         for(i=0;i<=n*m;i++)
 23         {
 24             if(a[q][w]=='N')
 25             {
 26                 q--;
 27                 if(q<0||q>=n)
 28                 {
 29                     e=1;
 30                     break;
 31                 }
 32                 else
 33                 {
 34                     if(map[q][w]==0)
 35                     map[q][w]=++ans;
 36                     else
 37                     {
 38                         an=map[q][w];
 39                         break;
 40                     }
 41                 }
 42             }
 43             else if(a[q][w]=='S')
 44             {
 45                 q++;
 46                 if(q<0||q>=n)
 47                 {
 48                     e=1;
 49                     break;
 50                 }
 51                 else
 52                 {
 53                     if(map[q][w]==0)
 54                     map[q][w]=++ans;
 55                     else
 56                     {
 57                         an=map[q][w];
 58                         break;
 59                     }
 60                 }
 61             }
 62             else if(a[q][w]=='E')
 63             {
 64                 w++;
 65                 if(w<0||w>=m)
 66                 {
 67                     e=1;
 68                     break;
 69                 }
 70                 else
 71                 {
 72                     if(map[q][w]==0)
 73                     map[q][w]=++ans;
 74                     else
 75                     {
 76                         an=map[q][w];
 77                         break;
 78                     }
 79                 }
 80             }
 81             else if(a[q][w]=='W')
 82             {
 83                 w--;
 84                 if(w<0||w>=m)
 85                 {
 86                     e=1;
 87                     break;
 88                 }
 89                 else
 90                 {
 91                     if(map[q][w]==0)
 92                     map[q][w]=++ans;
 93                     else
 94                     {
 95                         an=map[q][w];
 96                         break;
 97                     }
 98                 }
 99             }
100         }
101         if(e==1)
102         {
103             printf("%d step(s) to exit\n",ans);
104         }
105         else
106         {
107             printf("%d step(s) before a loop of %d step(s)\n",an-1,ans-an+1);
108         }
109     }
110 }
View Code

 

posted @ 2016-07-20 11:09  Crazy、baby  阅读(169)  评论(0编辑  收藏  举报