POJ_1573_Robot Motion(模拟法)

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

/*
poj 1573 http://poj.org/problem?id=1573
解题思路,题目很形象,也很容易懂,用一个二维数组保存字符,
,当前位置向哪去对应的下标做相应的变化,对于循环情况的处理
申请另个整形数组,一个用于标记当前位置是否被访问在while循环中
使用,一个用于标记达到该位置时花了多少步,那么只要产生循环用
总步数及数组标记的步数相加减既可。
程序需要注意的地方就是最后输出的时候注意多一少一的问题。
*/

 1 # include <stdio.h>
 2 # include <string.h>
 3 int main()
 4 {
 5     int a[20][20],b[20][20];
 6     int i,j,k,h,t,n,m;
 7     char ch[20][20];
 8     while(scanf("%d%d%d",&n,&m,&k) != EOF)
 9     {
10         if(n==0 || m==0)
11             break;
12         for(i=0;i<n;i++)
13         {
14             scanf("%s",ch[i]);
15         }
16         h=0;t=k-1;
17         memset(a,0,sizeof(a));
18         int step=1;
19         while(h>=0 && t>=0 && h<n && t<m && a[h][t]==0)
20         {
21             if(ch[h][t]=='S')
22             {
23                 
24                 a[h][t]=1;
25                 b[h][t]=step++;h++;
26             }
27             else if(ch[h][t]=='N')
28             {
29                 
30                 a[h][t]=1;
31                 b[h][t]=step++;h--;
32             }
33             else if(ch[h][t]=='W')
34             {
35                 
36                 a[h][t]=1;
37                 b[h][t]=step++;    t--;
38             }
39             else if(ch[h][t]=='E')
40             {
41                 
42                 a[h][t]=1;
43                 b[h][t]=step++;    t++;
44             }
45         }
46         if(a[h][t] == 1)
47             printf("%d step(s) before a loop of %d step(s)\n",b[h][t]-1,step-b[h][t]);
48         else
49             printf("%d step(s) to exit\n",step-1);
50         
51     }
52     return 0;
53 }
View Code

 

posted on 2013-08-07 14:40  随风浪子的博客  阅读(178)  评论(0编辑  收藏  举报

导航