Robot Motion

骑猪看日落 2022-05-26 06:57 265阅读 0赞

链接:http://poj.org/problem?id=1573

Problem Description:

机器人已经被编程以遵循其路径中的指示。机器人要移动的下一个方向的说明放在网格中。可能的指令是
N北(页面上)
S南(页面下)
E东(页面右)
W西(页面左)
例如,假设机器人在北面开始(顶部)网格1的一侧并开始向南(向下)。显示了机器人遵循的路径。离开电网之前,机器人会通过电网中的10条指令。
比较Grid 2中发生的事情:机器人只经历3次指令,然后通过8条指令开始循环,并且永远不会退出。
你要编写一个程序来确定一个机器人离开电网需要多长时间,或者机器人如何循环。

Input:

将有一个或多个机器人导航网格。每个数据的格式如下。第一行是由空格分隔的三个整数:网格中的行数,网格中的列数以及机器人从北方进入的列数。可能的输入栏从左边的一个开始编号。然后来到方向指示的行。每个网格至少有一行和最多10行和指令列。指令行只包含字符N,S,E或W,没有空格。输入的结尾由包含0 0 0的行表示。

Output:

对于输入中的每个网格,都有一行输出。机器人遵循一定数量的指令并从四边中的任何一边离开网格,或者机器人遵循一定数量的位置上的指令,然后重复若干位置上的指令。下面的示例输入对应于上面的两个网格,并说明了两种形式的输出。无论前面的数字是否为1,“step”一词总是紧跟“(s)”。

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)

思路:这道题其实也不难,主要是你的思路一定要清晰,明确。我就是卡在了一个细节上。我定义了一个结构体,结构体中每一个成员都有两个变量,一个是字符a,还有一个是用来标记步数的flag,方便后来判断机器人是否陷入循环。flag的初值都定义为0,后来走一步就更新一个flag。

My DaiMa:

  1. #include<stdio.h>
  2. #include<iostream>
  3. using namespace std;
  4. typedef struct
  5. {
  6. char a;
  7. int flag;
  8. }character;
  9. character s[101][101];
  10. int main()
  11. {
  12. int n,m,t,k,x;
  13. char ch[101];
  14. while(~scanf("%d%d",&n,&m))
  15. {
  16. if(n==0||m==0)
  17. break;
  18. else
  19. {
  20. scanf("%d",&t);
  21. for(int i=0;i<n;i++)
  22. {
  23. scanf("%s",ch);
  24. for(int j=0;j<m;j++)
  25. {
  26. s[i][j].a=ch[j];
  27. s[i][j].flag=0;//初定义
  28. }
  29. }
  30. int i,j;
  31. i=0,j=t-1,k=x=0;//k是标记机器人的步数,x是标记机器人是否进入了循环
  32. while((i>=0&&i<n)&&(j>=0&&j<m))
  33. {
  34. k++;//只要机器人还没有离开网格,就得走下一步,即k++
  35. if(s[i][j].flag!=0)//如果它的flag不等于0的话,就说明机器人陷入循环
  36. {
  37. x=-1;
  38. break;
  39. }
  40. s[i][j].flag=k;//让flag记录的是第几步,这样的话,
  41. if(s[i][j].a=='W')//当循环时就知道是第几步开始进入了循环
  42. {
  43. j--;
  44. }
  45. else if(s[i][j].a=='N')
  46. {
  47. i--;
  48. }
  49. else if(s[i][j].a=='E')
  50. {
  51. j++;
  52. }
  53. else if(s[i][j].a=='S')
  54. {
  55. i++;
  56. }
  57. }
  58. if(x==-1)
  59. printf("%d step(s) before a loop of %d step(s)\n",s[i][j].flag-1,k-s[i][j].flag);
  60. else
  61. printf("%d step(s) to exit\n",k);
  62. }
  63. }
  64. return 0;
  65. }<stdio.h>
  66. #include<iostream>
  67. using namespace std;
  68. typedef struct
  69. {
  70. char a;
  71. int flag;
  72. }character;
  73. character s[101][101];
  74. int main()
  75. {
  76. int n,m,t,k,x;
  77. char ch[101];
  78. while(~scanf("%d%d",&n,&m))
  79. {
  80. if(n==0||m==0)
  81. break;
  82. else
  83. {
  84. scanf("%d",&t);
  85. for(int i=0;i<n;i++)
  86. {
  87. scanf("%s",ch);
  88. for(int j=0;j<m;j++)
  89. {
  90. s[i][j].a=ch[j];
  91. s[i][j].flag=0;//初定义
  92. }
  93. }
  94. int i,j;
  95. i=0,j=t-1,k=x=0;//k是标记机器人的步数,x是标记机器人是否进入了循环
  96. while((i>=0&&i<n)&&(j>=0&&j<m))
  97. {
  98. k++;//只要机器人还没有离开网格,就得走下一步,即k++
  99. if(s[i][j].flag!=0)//如果它的flag不等于0的话,就说明机器人陷入循环
  100. {
  101. x=-1;
  102. break;
  103. }
  104. s[i][j].flag=k;//让flag记录的是第几步,这样的话,
  105. if(s[i][j].a=='W')//当循环时就知道是第几步开始进入了循环
  106. {
  107. j--;
  108. }
  109. else if(s[i][j].a=='N')
  110. {
  111. i--;
  112. }
  113. else if(s[i][j].a=='E')
  114. {
  115. j++;
  116. }
  117. else if(s[i][j].a=='S')
  118. {
  119. i++;
  120. }
  121. }
  122. if(x==-1)
  123. printf("%d step(s) before a loop of %d step(s)\n",s[i][j].flag-1,k-s[i][j].flag);
  124. else
  125. printf("%d step(s) to exit\n",k);
  126. }
  127. }
  128. return 0;
  129. }

发表评论

表情:
评论列表 (有 0 条评论,265人围观)

还没有评论,来说两句吧...

相关阅读

    相关 robots

    robots是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索

    相关 Robot Motion

    链接:http://poj.org/problem?id=1573 Problem Description: 机器人已经被编程以遵循其路径中的指示。机器人要移动的下一个方向