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
                

Sample Output

10 step(s) to exit 3 step(s) before a loop of 8 step(s)
 
 
这个题错的一塌糊涂
刚开始写的代码 不知道哪里有错 ,结果错误
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4. char str[][];
  5. int x[],y[],p,q;
  6. void f(char ch)
  7. {
  8. if(ch=='N')p--;
  9. if(ch=='S')p++;
  10. if(ch=='E')q++;
  11. if(ch=='W')q--;
  12. }
  13. int main()
  14. {
  15. int m,n,l,i,k,t;
  16. while(cin>>m>>n){
  17. if(m==&&n==)break;
  18. cin>>l;
  19. x[]=;
  20. y[]=l-;
  21. memset(str,'\0',sizeof(str));
  22. for(i=;i<m;i++){
  23. for(int j=;j<n;j++)cin>>str[i][j];
  24. }
  25. k=;
  26. while(){
  27. p=x[k];
  28. q=y[k];
  29. f(str[x[k]][y[k]]);
  30. if(p<||p==m||q<||q==n){
  31. cout<<k+<<" step(s) to exit"<<endl;
  32. break;
  33. }
  34. t=;
  35. for(i=;i<k;i++){
  36. if(x[k]==x[i]&&y[k]==y[i]){
  37. t=i;
  38. break;
  39. }
  40. }
  41. if(t!=){
  42. cout<<t<<" step(s) before a loop of "<<k-t<<" step(s)"<<endl;
  43. break;
  44. }
  45. k++;
  46. x[k]=p;
  47. y[k]=q;
  48. }
  49. }
  50. return ;
  51. }

检查半天没有结果,就换一种方法来写,结果 超时

  1. #include<iostream>
  2. #include<string.h>
  3. #include<stdio.h>
  4. using namespace std;
  5. char str[][];
  6. int x[][];
  7. int main()
  8. {
  9. int m,n,l;
  10. while(scanf("%d%d",&m,&n)){
  11. if(m==&&n==)break;
  12. scanf("%d",&l);
  13. memset(str,'\0',sizeof(str));
  14. memset(x,,sizeof(x));
  15. int p=,q=l-,k=;
  16. for(int i=;i<m;i++)scanf("%s",str[i]);
  17. while()
  18. {
  19. k++;
  20. if(str[p][q]=='N'&&!x[p][q]){
  21. x[p][q]=k;
  22. p--;
  23. }
  24. else if(str[p][q]=='S'&&!x[p][q]){
  25. x[p][q]=k;
  26. p++;
  27. }
  28. else if(str[p][q]=='E'&&!x[p][q]){
  29. x[p][q]=k;
  30. q++;
  31. }
  32. else if(str[p][q]=='W'&&!x[p][q]){
  33. x[p][q]=k;
  34. q--;
  35. }
  36. else if(x[p][q]){
  37. printf("%d step(s) before a loop of %d step(s)\n",x[p][q]-,k-x[p][q]);
  38. break;
  39. }
  40. else if(p<||q<||p==n||q==m){
  41. printf("%d step(s) to exit\n",k-);
  42. break;
  43. }
  44.  
  45. }
  46. }
  47. return ;
  48. }

最后最后的正确代码,分四个情况,每次移动后都判断是否越界,不越界就走下一步,越界就分情况输出结果

  1. #include<stdio.h>
  2. #include<string.h>
  3. char map[][];
  4. int t[][];
  5. int main()
  6. {
  7. int n,m,k;
  8. int x,y;
  9. while(scanf("%d%d",&n,&m)!=EOF&&(m+n)){
  10. scanf("%d",&k);
  11. for(int i=;i<n;i++) scanf("%s",&map[i]);
  12. x=;
  13. y=k-;
  14. memset(t,,sizeof(t));
  15. t[x][y]=;
  16. while(){
  17. if(map[x][y]=='E'){
  18. y++;
  19. if(y==m){
  20. printf("%d step(s) to exit\n",t[x][y-]);
  21. break;
  22. }
  23. if(t[x][y]!=){
  24. printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x][y-]-t[x][y]+);
  25. break;
  26. }
  27. t[x][y]=t[x][y-]+;
  28. }
  29. else if(map[x][y]=='W'){
  30. y--;
  31. if(y<){
  32. printf("%d step(s) to exit\n",t[x][y+]);
  33. break;
  34. }
  35. if(t[x][y]!=){
  36. printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x][y+]-t[x][y]+);
  37. break;
  38. }
  39. t[x][y]=t[x][y+]+;
  40. }
  41. else if(map[x][y]=='N'){
  42. x--;
  43. if(x<) {
  44. printf("%d step(s) to exit\n",t[x+][y]);
  45. break;
  46. }
  47. if(t[x][y]!=){
  48. printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x+][y]-t[x][y]+);
  49. break;
  50. }
  51. t[x][y]=t[x+][y]+;
  52. }
  53. else{
  54. x++;
  55. if(x==n){
  56. printf("%d step(s) to exit\n",t[x-][y]);
  57. break;
  58. }
  59. if(t[x][y]!=){
  60. printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-,t[x-][y]-t[x][y]+);
  61. break;
  62. }
  63. t[x][y]=t[x-][y]+;
  64. }
  65. }
  66. }
  67. return ;
  68. }

题不难,注意思路!!!

N - Robot Motion(第二季水)的更多相关文章

  1. F - The Fun Number System(第二季水)

    Description In a k bit 2's complement number, where the bits are indexed from 0 to k-1, the weight o ...

  2. D - Counterfeit Dollar(第二季水)

    Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...

  3. S - 骨牌铺方格(第二季水)

    Description          在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.         例如n=3时,为2× 3方格,骨牌的铺放方案有三种, ...

  4. R - 一只小蜜蜂...(第二季水)

    Description          有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数.         其中,蜂房的结构如下所示.     ...

  5. I - Long Distance Racing(第二季水)

    Description Bessie is training for her next race by running on a path that includes hills so that sh ...

  6. Y - Design T-Shirt(第二季水)

    Description Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA ...

  7. B - Maya Calendar(第二季水)

    Description During his last sabbatical, professor M. A. Ya made a surprising discovery about the old ...

  8. T - 阿牛的EOF牛肉串(第二季水)

    Description          今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做EOF的队伍,由04级的阿牛.XC以及05级的COY组成.在共同的集训生活中,大家建立了深厚的 ...

  9. E - Number Sequence(第二季水)

    Description A single positive integer i is given. Write a program to find the digit located in the p ...

随机推荐

  1. [转]CENTOS6 VNCSERVER安装

    标签:vncservercentos6.0 ssh隧道 vncviewer centos 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  2. 50中制作图表的JS库

    参看以下链接:http://www.tuicool.com/articles/FZNjMz

  3. knockout.js简单实用教程1

    第一次接触knockout是在一年多之前吧.当时是接手了一个别人的项目,在项目中有用到knockout来进行数据的绑定.也就开始学习起来knockout.在之后的项目中也多次用到了这个.在第一次开始学 ...

  4. c#以文件流的形式输出xml(可以解决内存溢出)-XmlTextWriter

    1.XmlTextWriter 表示提供快速.非缓存.只进方法的编写器,该方法生成包含 XML 数据(这些数据符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议)的流或文 ...

  5. RHEL 7.0 修改防火墙配置

    RHEL 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 关闭firewall: systemctl stop firewalld.service #停止firewal ...

  6. Java程序员需要学习的知识点

    Java是全世界最受欢迎的3大编程语言之一,它可以开发出许多实用的WEB应用程序和桌面应用程序,更重要的一点,Java是跨平台的语言——编写一次,可以再任何地方运行.另外,Java也很容易入门,如果你 ...

  7. TD数量不确定时如何让其宽度平均分布

    D数量不确定时如何让其宽度平均分布?答案很简单,我们只要在table里面加上一下代码就可以实现. table { width: 100%; table-layout: fixed; }

  8. C# ref_out_params方法的参数_4种类型的参数

    之前学习C#没有做笔记的习惯,因此有些基础上的东西并没有很好地整理起来,虽然这些东西比较常用,因此也没什么影响,但总觉得不整理一下感觉老是有种陌生感.今天特别整理一下C#4种类型的参数. 一.按值传递 ...

  9. Android 匿名共享内存Java接口分析

    在Android 匿名共享内存驱动源码分析中介绍了匿名共享内存的驱动实现过程,本文在Android匿名共享内存驱动基础上,介绍Android匿名共享内存对外Android系统的匿名共享内存子系统的主体 ...

  10. EF中读取随机数据的问题

    _list.Where(a=>a.级别=="1").OrderBy(a => Guid.NewGuid()).Take(10);