POJ 1573 (13.10.11)
Description
Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
题意: 不难理解, 我简单说说, 给出r行c列, 然后从第一行的第i个位置开始走
每个位置有标记E W S N, 分别表示向东, 向西, 向南, 向北
然后, 有两种情况, 一种能走出去, 一种是陷入死循环
做法: 每一步都标上是第几步走的就OK了~ 然后按题意模拟~
AC代码:
#include<stdio.h> char str[100][100]; int main() { int r, c, in; while(scanf("%d %d %d", &r, &c, &in) != EOF) { if(r == 0 && c ==0 && in == 0) break; getchar(); for(int i = 0; i < r; i++) gets(str[i]); int tr, tc, loop; int step = 0; int mark = 1; tr = 0; tc = in-1; while(1) { if(str[tr][tc] == 'E') { step++; str[tr][tc] = step + '0'; if(tc == c-1) break; else tc = tc + 1; } else if(str[tr][tc] == 'W') { step++; str[tr][tc] = step + '0'; if(tc == 0) break; else tc = tc - 1; } else if(str[tr][tc] == 'S') { step++; str[tr][tc] = step + '0'; if(tr == r-1) break; else tr = tr + 1; } else if(str[tr][tc] == 'N') { step++; str[tr][tc] = step + '0'; if(tr == 0) break; else tr = tr - 1; } else { mark = 0; loop = str[tr][tc] - '0' - 1; printf("%d step(s) before a loop of %d step(s)\n", loop, step - loop); break; } } if(mark == 1) printf("%d step(s) to exit\n", step); } return 0; }优质内容筛选与推荐>>
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
已发送
发送中
微信扫一扫
关注该公众号