https://www.luogu.org/problem/show?pid=1126

题目描述

机器人移动学会(RMI)现在正尝试用机器人搬运物品。机器人的形状是一个直径1.6米的球。在试验阶段,机器人被用于在一个储藏室中搬运货物。储藏室是一个N*M的网格,有些格子为不可移动的障碍。机器人的中心总是在格点上,当然,机器人必须在最短的时间内把物品搬运到指定的地方。机器人接受的指令有:向前移动1步(Creep);向前移动2步(Walk);向前移动3步(Run);向左转(Left);向右转(Right)。每个指令所需要的时间为1秒。请你计算一下机器人完成任务所需的最少时间。

输入输出格式

输入格式:

输入的第一行为两个正整数N,M(N,M<=50),下面N行是储藏室的构造,0表示无障碍,1表示有障碍,数字之间用一个空格隔开。接着一行有四个整数和一个大写字母,分别为起始点和目标点左上角网格的行与列,起始时的面对方向(东E,南S,西W,北N),数与数,数与字母之间均用一个空格隔开。终点的面向方向是任意的。

输出格式:

一个整数,表示机器人完成任务所需的最少时间。如果无法到达,输出-1。

输入输出样例

输入样例#1:

  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 S
输出样例#1:

  1. 12
  2.  
  3. 搜索入门中,ε=(´ο`*))),麻烦又恶心,广搜每次每种走法、
  1. 注意的几点:黑格子的左侧,左上,上方的格子都不能去,(意会一下),
    如果某个点相当前方向不能走i步,则一定不能走i+1步,已经被阻断。
    方向改变多模拟几次、
  1. #include <cstdio>
  2. #include <queue>
  3.  
  4. bool vis[][][];
  5. int n,m,map[][];
  6. int arrivex,arrivey;
  7. int fx[]={-,,,};
  8. int fy[]={,-,,};
  9. struct Node_pos {
  10. int x,y,step;
  11. int direction;
  12. }now;
  13. std::queue<Node_pos>que;
  14.  
  15. inline bool can_go(Node_pos now)
  16. {
  17. if(now.x>=n||now.y>=m||now.x<||now.y<) return false;
  18. if(vis[now.x][now.y][now.direction]||vis[now.x+][now.y+][now.direction]) return ;
  19. if(vis[now.x+][now.y][now.direction]||vis[now.x][now.y+][now.direction]) return ;
  20. if(map[now.x][now.y]||map[now.x+][now.y]||map[now.x][now.y+]||map[now.x+][now.y+]) return ;
  21. return true;
  22. }
  23.  
  24. inline void read(int &x)
  25. {
  26. x=; register char ch=getchar();
  27. for(;ch>''||ch<'';) ch=getchar();
  28. for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-'';
  29. }
  30.  
  31. int AC()
  32. {
  33. read(n),read(m);
  34. for(int x,i=; i<=n; ++i)
  35. for(int j=; j<=m; ++j)
  36. {
  37. read(map[i][j]);
  38. if(map[i][j]) map[i][j-]=map[i-][j]=map[i-][j-]=;
  39. }
  40. read(now.x);read(now.y);
  41. read(arrivex);read(arrivey);
  42. char s[];scanf("%s",s);
  43. switch (s[]) {
  44. case 'N': now.direction=;break;
  45. case 'W': now.direction=;break;
  46. case 'S': now.direction=;break;
  47. case 'E': now.direction=;break;
  48. }
  49. que.push(now);
  50. vis[now.x][now.y][now.direction]=;
  51. for(Node_pos to;!que.empty();)
  52. {
  53. to=now=que.front(); que.pop();
  54.  
  55. // printf("%d %d\n",now.x,now.y);
  56.  
  57. if(now.x==arrivex&&now.y==arrivey)
  58. { printf("%d\n",now.step); return ; }
  59. for(int i=; i<; ++i)
  60. {
  61. to.x+=fx[now.direction];
  62. to.y+=fy[now.direction];
  63. if(map[to.x][to.y]||to.x<||to.y<||to.x>=n||to.y>=m) break;
  64. // if(!can_go(to)) break;
  65. to.step=now.step+;
  66. // vis[to.x+1][to.y][now.direction]=1;
  67. // vis[to.x][to.y+1][now.direction]=1;
  68. // vis[to.x+1][to.y+1][now.direction]=1;
  69.  
  70. if(to.x==arrivex&&to.y==arrivey)
  71. { printf("%d\n",to.step); return ; }
  72. else if(!vis[to.x][to.y][now.direction])
  73. {
  74. vis[to.x][to.y][now.direction]=;
  75. que.push(to);
  76. }
  77. } to=now;
  78. if(!vis[now.x][now.y][now.direction+&])
  79. {
  80. to.direction=now.direction+&;
  81. vis[to.x][to.y][to.direction]=;
  82. to.step=now.step+; que.push(to);
  83. }
  84. if(!vis[now.x][now.y][now.direction+&])
  85. {
  86. to.direction=now.direction+&;
  87. vis[to.x][to.y][to.direction]=;
  88. to.step=now.step+; que.push(to);
  89. }
  90. } puts("-1");
  91. return ;
  92. }
  93.  
  94. int Hope=AC();
  95. int main(){;}
  1.  

洛谷—— P1126 机器人搬重物的更多相关文章

  1. 洛谷P1126 机器人搬重物

    洛谷1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格, ...

  2. 洛谷——P1126 机器人搬重物

    P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...

  3. 洛谷 P1126 机器人搬重物 (BFS)

    题目链接:https://www.luogu.org/problemnew/show/P1126 吐槽:这题很阴险 一开始没把格子图转化成点图:30分 转化成点图,发现样例过不去,原来每步要判断vis ...

  4. 洛谷P1126 机器人搬重物【bfs】

    题目链接:https://www.luogu.org/problemnew/show/P1126 题意: 给定一个n*m的方格,机器人推着直径是1.6的球在格子的线上运动. 每一秒钟可以向左转,向右转 ...

  5. 洛谷P1126机器人搬重物[BFS]

    题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有些格子为不可移动的障碍.机 ...

  6. 洛谷 P1126 机器人搬重物

    题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径 $1.6 米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个 N×MN \times MN×M ...

  7. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

  8. P1126 机器人搬重物

    P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...

  9. luogu P1126 机器人搬重物

    题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有些格子为不可移动的障碍.机 ...

随机推荐

  1. JS清除选择内容的方法

    本文实例讲述了JS清除选择内容的方法.分享给大家供大家参考.具体分析如下: 今天在做一个DIV拖动的效果,发现在拖动的时候会选中页面中的文本,于是找了一下JS清除选择的内容的相关信息. 在得到的结果中 ...

  2. luogu1120 小木棍【数据加强版】 暴力剪枝

    题目大意 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50.现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度.给出每段小木棍的长度,编程帮 ...

  3. 在Android系统中修改Android.mk使其同时编译rgb2565和rgb2888(向out/host/linux-x86/bin/下新增加一个工具命令)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7514559 在Android系统中修改android.mk使其同时编译rgb2565和rgb ...

  4. golang iris下面的websocket

    最近要做后台主动推送:(iris框架,封装的有wesocket,刚开始以为直接拿过来用,结果不是现在贴一下代码,写一下遇到的坑) func main() {    app := iris.New()  ...

  5. Arduino-IIC-Wire.h

    前言:Wire.h是Arduino的IIC库. 一.Wire库函数 Wire.begin() Wire.requestFrom() Wire.beginTransmission() Wire.endT ...

  6. 使用IDEA搭建一个 Spring + Spring MVC 的Web项目(零配置文件)

    注解是Spring的一个构建的一个重要手段,减少写配置文件,下面解释一下一些要用到的注解: @Configuration 作用于类上面,声明当前类是一个配置类(相当于一个Spring的xml文件)@C ...

  7. Oracle-基本SQL语句

    --添加一个表 create table TestUser ( id int primary key , name varchar(20) , address varchar(20) ) /* *设置 ...

  8. MySQL定时任务与存储过程实例

    shell 定时任务:​/usr/bin/mysql -uroot -pxxxxx databasename -e "update table set ......."​​mysq ...

  9. -webkit-appearance: none; 去除浏览器默认样式

    -webkit-appearance: none;    去除浏览器默认样式

  10. 文字纵向滚动marquee

    <div style="width:200px; height:300px"><marquee direction="up" truespee ...