POJ 1573(模拟)

有一点想不到怎么记录循环的步数,看了一下题解,用vis数组记录到每一个所需走的步数。写得有点乱。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 using namespace std;
10 int n,m,k;
11 char a[200][200];
12 int vis[200][200];
13 int flag,sum,sum1;
14 void dfs(int x,int y,int cout)
15 {
16     if(vis[x][y])
17     {
18         flag=2;
19         sum=cout-vis[x][y];
20         sum1=vis[x][y];
21         return;
22     }
23     if(x<0||y<0||x>=n||y>=m)
24     {
25         flag=1;
26         sum=cout;
27         return;
28     }
29     if(flag)
30     return;
31     vis[x][y]=cout;
32     if(a[x][y]=='N')
33     {
34         dfs(x-1,y,cout+1);
35         if(flag)
36         return;
37     }
38     else if(a[x][y]=='S')
39     {
40         dfs(x+1,y,cout+1);
41         if(flag)
42         return;
43     }
44     else if(a[x][y]=='E')
45     {
46         dfs(x,y+1,cout+1);
47         if(flag)
48         return;
49     }
50     else if(a[x][y]=='W')
51     {
52         dfs(x,y-1,cout+1);
53         if(flag)
54         return;
55     }
56 }
57 int main(int argc, char *argv[])
58 {
59     
60     while(scanf("%d%d%d",&n,&m,&k)!=EOF)
61     {
62         if(n==0&&m==0&&k==0)
63         break;
64         for(int i=0;i<n;i++)
65             scanf("%s",a[i]);
66         k--;memset(vis,0,sizeof(vis));
67         flag=0;
68         dfs(0,k,1);
69         if(flag==1)
70             printf("%d step(s) to exit\n",sum-1);
71         if(flag==2)
72             printf("%d step(s) before a loop of %d step(s)\n",sum1-1,sum);
73     }
74     return 0;
75 }

 

posted @ 2018-10-10 21:16  huluxin  阅读(108)  评论(0)    收藏  举报