The Robot Moving Institute is using a robot in their local store to transport different items. Of course the robot should spend only the minimum time necessary when travelling from one place in the store to another. The robot can move only along a straight line (track). All tracks form a rectangular grid. Neighbouring tracks are one meter apart. The store is a rectangle N x M meters and it is entirely covered by this grid. The distance of the track closest to the side of the store is exactly one meter. The robot has a circular shape with diameter equal to 1.6 meter. The track goes through the center of the robot. The robot always faces north, south, west or east. The tracks are in the south-north and in the west-east directions. The robot can move only in the direction it faces. The direction in which it faces can be changed at each track crossing. Initially the robot stands at a track crossing. The obstacles in the store are formed from pieces occupying 1m x 1m on the ground. Each obstacle is within a 1 x 1 square formed by the tracks. The movement of the robot is controlled by two commands. These commands are GO and TURN.
The GO command has one integer parameter n in {1,2,3}. After receiving this command the robot moves n meters in the direction it faces.

The TURN command has one parameter which is either left or right. After receiving this command the robot changes its orientation by 90o in the direction indicated by the parameter.

The execution of each command lasts one second.

Help researchers of RMI to write a program which will determine the minimal time in which the robot can move from a given starting point to a given destination.

Input

The input consists of blocks of lines. The first line of each block contains two integers M <= 50 and N <= 50 separated by one space. In each of the next M lines there are N numbers one or zero separated by one space. One represents obstacles and zero represents empty squares. (The tracks are between the squares.) The block is terminated by a line containing four positive integers B1 B2 E1 E2 each followed by one space and the word indicating the orientation of the robot at the starting point. B1, B2 are the coordinates of the square in the north-west corner of which the robot is placed (starting point). E1, E2 are the coordinates of square to the north-west corner of which the robot should move (destination point). The orientation of the robot when it has reached the destination point is not prescribed. We use (row, column)-type coordinates, i.e. the coordinates of the upper left (the most north-west) square in the store are 0,0 and the lower right (the most south-east) square are M - 1, N - 1. The orientation is given by the words north or west or south or east. The last block contains only one line with N = 0 and M = 0.

Output

The output contains one line for each block except the last block in the input. The lines are in the order corresponding to the blocks in the input. The line contains minimal number of seconds in which the robot can reach the destination point from the starting point. If there does not exist any path from the starting point to the destination point the line will contain -1.

Sample Input

  1. 9 10
  2. 0 0 0 0 0 0 1 0 0 0
  3. 0 0 0 0 0 0 0 0 1 0
  4. 0 0 0 1 0 0 0 0 0 0
  5. 0 0 1 0 0 0 0 0 0 0
  6. 0 0 0 0 0 0 1 0 0 0
  7. 0 0 0 0 0 1 0 0 0 0
  8. 0 0 0 1 1 0 0 0 0 0
  9. 0 0 0 0 0 0 0 0 0 0
  10. 1 0 0 0 0 0 0 0 1 0
  11. 7 2 2 7 south
  12. 0 0

Sample Output

  1. 12
  2.  
  3. 题目大意:
    就是给机器人编一个行走的代码,求最短的时间,其实就是最短路。
    这个有点不同,第一个是有方向,第二个是他是一个圆,不是点有面积。
    思路:
    bfs,先处理这三种步法,走一步,走两步,走三步,
    处理完之后再处理方向。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <queue>
  5. #include <algorithm>
  6. using namespace std;
  7. int n,m,x1,y1,x2,y2,d;
  8. char b[20];
  9. int tu[105][105];
  10. bool vis[105][105][4];
  11. int dx[4]={-1,0,1,0};//这里要注意东南西北相对应
  12. int dy[4]={0,1,0,-1};
  13. struct node
  14. {
  15. int x,y,step,fang;
  16. };
  17. int check(int x,int y)
  18. {
  19. if(x<1||y<1||x>=n||y>=m||tu[x][y]||tu[x+1][y]||tu[x][y+1]||tu[x+1][y+1]) return 0;//因为是左上角,所以x不能等于n,同理y也不能等于m。
  20. return 1;
  21. }
  22. int bfs()
  23. {
  24. queue<node>que;
  25. node a;
  26. a.x=x1;
  27. a.y=y1;
  28. a.fang=d;
  29. a.step=0;
  30. que.push(a);
  31. vis[a.x][a.y][a.fang]=1;
  32. while(!que.empty())
  33. {
  34.  
  35. a=que.front();que.pop();
  36. if(a.x==x2&&a.y==y2) return a.step;
  37. node ex=a;//注意这个ex要定义在外面,因为ex会累加,累加一次说明走一步,两次走两步,以此类推
  38. for(int i=1;i<4;i++)//第一个for来走步数,三种情况,所以三次循环
  39. {
  40. ex.x+=dx[a.fang];
  41. ex.y+=dy[a.fang];
  42. if(!check(ex.x,ex.y)) break;
  43. if(!vis[ex.x][ex.y][a.fang])
  44. {
  45. ex.fang=a.fang;
  46. vis[ex.x][ex.y][ex.fang]=1;
  47. ex.step=a.step+1;
  48. que.push(ex);
  49. }
  50. }
  51. for(int i=0;i<4;i++)//第二个for来走方向,四种情况,四次循环
  52. {
  53. if(max(a.fang,i)-min(a.fang,i)==2) continue;
  54. if(vis[a.x][a.y][i]) continue;
  55. vis[a.x][a.y][i]=1;
  56. node ex=a;
  57. ex.fang=i;
  58. ex.step=a.step+1;
  59. que.push(ex);
  60. }
  61. }
  62. return -1;
  63. }
  64.  
  65. int main()
  66. {
  67. while(scanf("%d%d",&n,&m)&&(n+m))
  68. {
  69. for(int i=1;i<=n;i++)
  70. {
  71. for(int j=1;j<=m;j++)
  72. scanf("%d",&tu[i][j]);
  73. }
  74. memset(vis,0,sizeof(vis));
  75. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  76. scanf("%s",b);
  77. if(b[0]=='n') d=0;
  78. if(b[0]=='e') d=1;
  79. if(b[0]=='s') d=2;
  80. if(b[0]=='w') d=3;
  81. printf("%d\n",bfs());
  82. }
  83. return 0;
  84. }

  

寒假训练——搜索——C - Robot的更多相关文章

  1. 寒假训练——搜索 K - Cycle

    A tournament is a directed graph without self-loops in which every pair of vertexes is connected by ...

  2. 寒假训练——搜索 E - Bloxorz I

    Little Tom loves playing games. One day he downloads a little computer game called 'Bloxorz' which m ...

  3. 寒假训练——搜索 G - Xor-Paths

    There is a rectangular grid of size n×mn×m . Each cell has a number written on it; the number on the ...

  4. J - Abbott's Revenge 搜索 寒假训练

    题目 题目大意:这个题目就是大小不超过9*9的迷宫,给你起点终点和起点的方向,让你进行移动移动特别之处是不一定上下左右都可以,只有根据方向确定可以走的方向.思路:需要写一个读入函数,这个需要读入起点, ...

  5. 寒假训练 A - A Knight's Journey 搜索

    Background The knight is getting bored of seeing the same black and white squares again and again an ...

  6. 算法专题训练 搜索a-T3 Ni骑士(ni)

    搞了半天八数码弄不出来就只好来打题解  这道题是在搜索a碰到的(链接: http://pan.baidu.com/s/1jG9rQsQ ) 感觉题目最大亮点就是这英文简写"ni", ...

  7. HRBUST - 2347 - 递归画图 - vj大一上寒假训练2.11

    其他题可由本题变形得到. 思路:利用坐标dfs搜索. 注意:1,初始化.2,坐标实时更新(x,y) 代码: #include<iostream> #include<cstdio> ...

  8. 寒假集训——搜索 B - Sudoku

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream&g ...

  9. 寒假集训——搜索 D - Cubes for Masha

    #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h&g ...

随机推荐

  1. Java先比较日期再比较时间

    package com.bihang.seaya; import lombok.Data; import java.text.ParseException; import java.text.Simp ...

  2. couldn't resolve host api.weixin.qq.com

    1.代理服务器突然出现 couldn't resolve host api.weixin.qq.com 不知原因 2.重启nginx无效-----代码肯定没有动过(之前出现过,过了一天恢复) 3.防火 ...

  3. nodeJs express mongodb 建站(window 10 版)

    一.环境搭建 安装 node.git.npm.express.mongodb.主要介绍express.mongodb 的安装. (1)node安装:https://nodejs.org/en/down ...

  4. HTML5中的input type为file控件限制上传文件类型及扩展

    简单介绍 input file控件限制上传文件类型如下:1.文件类型中间用,分开:2.html和htm这样的要写成两个: 3实例: <input type="file" na ...

  5. mybatis的三种批量插入以及次效率比较

    1.表结构 CREATE TABLE `t_user` ( `id` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '主键', `name` varc ...

  6. python语言学习--1

    第一天 item: 当字符串中出现 反斜杠'\' 时,输出时会把它当做转义字符处理,所以结果中不会出现它,若要正常输出则需要在字符串前面加上r, 我想r的意思是religion即“原始”的意思: it ...

  7. postman测试方法的 时候总是出现状态码500

    postman测试方法的 时候总是出现状态码500   {     "timestamp": "2018-07-23T05:43:51.773+0000",   ...

  8. git 入门教程之版本控制

    版本控制 我们知道 git 是分布式版本控制系统,所以称被控制对象是版本本身没错,但是从git 命令中发现,并没有版本这个名词,有的只是commit,所以前几节我一直称其为提交. 为了避免后续教程引发 ...

  9. svn状态与常见错误

    TortoiseSVN 1.6.16是最后一个目录独立管理自身cache的svn版本(每个目录下都有一个隐藏的.svn文件夹) 之后的版本会则会根目录上统一进行管理(只有根目录下有一个隐藏的.svn文 ...

  10. Linux平台下RMAN异机恢复总结

    下面总结.整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,直到最近偶然被翻看到,遂整理.总结一下.如下所示,个人将整个RMAN异机恢复分为准备工作和操作步骤两大部分.当然,准 ...