Description


A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are

N north (up the page) 

S south (down the page) 

E east (to the right on the page) 

W west (to the left on the page)

For example, suppose the robot starts on the north (top) side of Grid 1 and starts south (down). The path the robot follows is shown. The robot goes through 10 instructions in the grid before leaving the grid.

Compare what happens in Grid 2: the robot goes through 3 instructions only once, and then starts a loop through 8 instructions, and never exits.

You are to write a program that determines how long it takes a robot to get out of the grid or how the robot loops around. 

Input

There will be one or more grids for robots to navigate. The data for each is in the following form. On the first line are three integers separated by blanks: the number of rows in the grid, the number of columns in the grid, and the number of the column in which the robot enters from the north. The possible entry columns are numbered starting with one at the left. Then come the rows of the direction instructions. Each grid will have at least one and at most 10 rows and columns of instructions. The lines of instructions contain only the characters N, S, E, or W with no blanks. The end of input is indicated by a row containing 0 0 0.

Output

For each grid in the input there is one line of output. Either the robot follows a certain number of instructions and exits the grid on any one the four sides or else the robot follows the instructions on a certain number of locations once, and then the instructions on some number of locations repeatedly. The sample input below corresponds to the two grids above and illustrates the two forms of output. The word "step" is always immediately followed by "(s)" whether or not the number before it is 1.

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;
}

最新文章

  1. VMware ubuntu中执行python文件的操作小结
  2. C# 多线程线程池( 一 )
  3. 关于treeview手动添加的方法
  4. 下拉更新列表Android-PullToRefresh
  5. HTTP深入浅出 http请求
  6. .NET验证码控件(美观 易用)
  7. Android进阶笔记02:Android 网络请求库的比较及实战(二)
  8. moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
  9. A+B II
  10. Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势
  11. Wp-UserAgent——让WordPress在评论后面加上浏览器和操作系统信息
  12. Cannot create a session after the response has been committed
  13. shell脚本--输入与输出
  14. C# Null 赋值
  15. 【Cesium】物体显示
  16. VK Cup 2016 - Qualification Round 2 B. Making Genome in Berland
  17. 51nod 1043 幸运号码(数位dp
  18. 使用GNU工具链进行嵌入式裸机开发
  19. 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
  20. Wex5短信验证

热门文章

  1. ACM - ICPC World Finals 2013 C Surely You Congest
  2. maven常用构建命令
  3. 修改数据库中group_concat的返回结果的长度限制
  4. C扩展Python - official docs - defining new type
  5. 【C#学习笔记】写文件
  6. 【jQuery】总结:筛选器、控制隐藏、操作元素style属性
  7. Android-取消GridView/ListView item被点击时的效果
  8. 阿里云容器服务--配置自定义路由服务应对DDOS攻击
  9. 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power电源控制
  10. 查询MySQL锁等待的语句