【HDOJ】1035 Robot Motion

简单题目。按照要求遍历即可,发现访问过的点则必定出现环路,重新计算环长度。

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

 

posted on 2014-04-04 22:16  Bombe  阅读(126)  评论(0)    收藏  举报

导航