机器人已被编程为按照其指令中的路径进行操作。机器人要移动的下一个方向的指令放在网格中。可能的指令是

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)

例如,假设机器人从网格1的北面(顶部)开始,然后开始向南(下)。机器人的路径如图所示。在离开网格之前,机器人会在网格中执行10条指令。

比较一下网格2:机器人只经过3次指令,然后通过8条指令开始循环,从不退出。

您要编写一个程序,用于确定机器人离开网格所需的时间以及机器人环绕的周期。

Input

将有一个或多个网格用于漫游器导航。每个数据的格式如下。第一行是三个整数,以空格分隔:网格中的行数,网格中的列数以及机器人从北方进入的列数。可能的条目列从左侧开始编号。然后来排列方向说明。每个网格将具有至少一个,最多十行和多列指令。指令行仅包含没有空格的字符N,S,E或W。输入结束由含0 0 0的行表示。
Output

对于输入中的每个网格,都有一行输出。机器人遵循一定数量的指令,并在四方面的任何一个上退出网格,否则机器人会按照一定数量的位置上的指令进行一次,然后重复一些位置上的指令。下面的样本输入对应于上面的两个网格,并说明了两种形式的输出。 “step”一词紧随其后的是“(s)”,前面的数字是否为1。
Sample Input

3 6 5
NEESWE
WWWESS
SNWWWW
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 

Sample Output

10 step(s) to exit
3 step(s) before a loop of 8 step(s)
 1 #include<stdio.h>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 char paths[1005][1005];
 5 int step[1005][1005];
 6 int r,c,start,row,col,exitstep,diestep,diex,diey;
 7 bool die = false;
 8 /*感想:实现递归的过程,一定要注意代码的整洁,不是指格式,而是逻辑思路,
 9 就像数学的提取公因式一样,不要把同样的语句写太多遍,重复语句的执行会增加运行时间,
10 简单说,有可能因为的重复语句,不能实现AC目的*/
11 void solve(int row,int col,int num)
12 {
13     if(row < 0|| col < 0 || row >= r || col >= c) /*跳出网格*/
14     {
15         exitstep = num;
16         return;
17     }
18     if(step[row][col]) /*陷入循环*/
19     {
20         die = true;
21         diex = col;
22         diey = row;
23         diestep = step[row][col];
24         step[row][col] = num - step[row][col];
25         return;
26     }
27     //cout<<paths[row][col]<<endl;
28     step[row][col] = num;
29     if(paths[row][col] == 'N')
30         solve(row-1,col,num+1);
31     else if(paths[row][col] == 'S')
32         solve(row+1,col,num+1);
33     else if(paths[row][col] == 'E')
34         solve(row,col+1,num+1);
35     else if(paths[row][col] == 'W')
36         solve(row,col-1,num+1);
37 }
38
39 int main()
40 {
41     while(cin>>r>>c,r||c)
42     {
43         cin>>start;
44         for(int i = 0; i < r; i++)
45             scanf("%s",paths[i]);
46         memset(step,0,sizeof(step));
47         die = false;
48         start = start -1;
49         solve(0,start,1);
50         if(die)  //3 step(s) before a loop of 8 step(s)
51             cout<< --diestep<<" step(s) before a loop of "<<step[diey][diex]<<" step(s)"<<endl;
52         else    //10 step(s) to exit
53             cout<<--exitstep<<" step(s) to exit"<<endl;
54     }
55     return 0;
56 }

转载于:https://www.cnblogs.com/jj81/p/7447073.html

ACM Robot Motion相关推荐

  1. POJ -1573 Robot Motion

    题目链接:POJ 1573 Robot Motion 一个小模拟,非常easy,依照提示一步步走就是了 #include <iostream> #include <cstdio> ...

  2. HDOJ1035 ( Robot Motion ) 【递归】

    矩阵最大只有10*10,规模较小,用递归可以解决. 最初第15行代码除了问题: (1)直接使用了题目中的输出3 step(s) before a loop of 8 step(s),忘了把3和8改成% ...

  3. robot motion planning介绍

    声明:本篇博客内容主要是由邱强博士的运动规划视频整理而成.非原创,只为了一时复习之方便,侵权必删! 最近的学习顺序不对,至少要把机器人的的动力学部分完成,再来做运动规划的学习,这样搞得我的节奏有点不舒 ...

  4. Robot Motion(模拟题bfs)

    题目描述 A robot has been programmed to follow the instructions in its path. Instructions for the next d ...

  5. pku 1573 Robot Motion 第一周训练——模拟

    http://poj.org/problem?id=1573 一个原来做过的模拟题,大早上做题就是头脑清楚啊.1Y..呵呵.. View Code #include <iostream># ...

  6. POJ -- 1573 Robot Motion

    2019独角兽企业重金招聘Python工程师标准>>> 其实模拟题经常用到环这个东西,我发觉挺多宽搜的题目也是,状态来回转移,最终成了环. 多说一点,最近做了不少宽搜的题(很简单), ...

  7. Principles of Robot Motion Theory, Algorithms, and Implementations下载

    机器人运动理论的原理,算法和实现,非常经典的一本书,做规划的小伙伴们的必备! csdn也有本书的相关资源,但无一例外的都需要积分下载,互联网的分享精神真是被这帮人都玩坏了! 原本想上传,无奈不能上传已 ...

  8. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  9. ACM 网址和一些建议

    USACO http://ace.delos.com/usacogate 美国著名在线题库,专门为信息学竞赛选手准备 TJU http://acm.tongji.edu.cn/ 同济大学在线题库,唯一 ...

最新文章

  1. 一条命令monkey命令
  2. OpenCV之calib3d 模块. 相机定标和三维重建
  3. 仪表盘加载数据nan_6种数据格式对比,用Jupyter+pandas高效数据分析
  4. 利用matlab点云工具处理点云
  5. springboot项目打war包流程
  6. vsftpd+pam_mysql+mysql
  7. Netty框架多人聊天案例,代码示例
  8. hhvm mysql_Ubuntu 14.10 安装 Nginx + MySQL + HHVM + phpMyAdmin [LNMH]
  9. (七)洞悉linux下的Netfilteriptables:状态防火墙
  10. jrtplib的使用
  11. java计算机毕业设计健康生活网站源程序+mysql+系统+lw文档+远程调试
  12. Linux RT-PREEMPT的softirq机制
  13. android动态显示表格数据,android中水平显示表格数据
  14. olivettifaces人脸识别之思考
  15. 思考一道题:非相邻数最大和
  16. Ubuntu16.04安装vscode,并修改为简体中文版,设置显示空格和tab,汉字或者汉字的标点带黄色框
  17. android相机曝光度调节,手机摄影很难?这有份超全的安卓相机操作指南,专业模式一点就透...
  18. Third1: Basic Web applications BASIC NFS services triggering mount | Cloud computing
  19. ROS系统MoveIt玩转双臂机器人系列(三)--利用controller控制实际机器人
  20. 安卓编译Release版本

热门文章

  1. Python Web笔记之高性能网络编程
  2. 原生DOM选择器querySelector和querySelectorAll
  3. 重建程序员能力(2)-如何使asp.net mvc应用增加js和其他功能
  4. tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)...
  5. 使用POI读取word文档
  6. 注册表的学习 和 实例
  7. mysql 文章内容_假设mysql数据库里面有个字段存的是文章内容,用什么方式查询出所有文章中包含某个特定词语的数据。...
  8. (130)System Verilog忽略仓数与违反仓数用法
  9. (64)SPI外设驱动用户发送模块(三)(第13天)
  10. (99)FPGA ROM实现(V实现)