【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 }
浙公网安备 33010602011771号