洛谷 P1126 机器人搬重物
题目描述
机器人移动学会(RMI)现在正尝试用机器人搬运物品。机器人的形状是一个直径 $1.6 米的球。在试验阶段,机器人被用于在一个储藏室中搬运货物。储藏室是一个 N×MN \times MN×M 的网格,有些格子为不可移动的障碍。机器人的中心总是在格点上,当然,机器人必须在最短的时间内把物品搬运到指定的地方。机器人接受的指令有:向前移动 111 步(Creep);向前移动2步(Walk);向前移动 333 步(Run);向左转(Left);向右转(Right)。每个指令所需要的时间为 111 秒。请你计算一下机器人完成任务所需的最少时间。
输入输出格式
输入格式:
第一行为两个正整数 N,M(N,M≤50)N,M(N,M \le 50)N,M(N,M≤50) ,下面 NNN 行是储藏室的构造, 000 表示无障碍, 111 表示有障碍,数字之间用一个空格隔开。接着一行有 444 个整数和 111 个大写字母,分别为起始点和目标点左上角网格的行与列,起始时的面对方向(东 EEE ,南 SSS ,西 WWW ,北 NNN ),数与数,数与字母之间均用一个空格隔开。终点的面向方向是任意的。
输出格式:
一个整数,表示机器人完成任务所需的最少时间。如果无法到达,输出 −1-1−1 。

输入输出样例
9 10
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 0
7 2 2 7 S
12 明显是宽搜。
首先要把网格图转化为点图,
其次对于每一个状态要存储三个信息行号列号方向。
注意走两步的情况一定要注意不能越过障碍物。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<climits>
#include<cstdio>
#include<queue>
#include<map>
using namespace std;
int n,m,sx,sy,dx,dy,ans=INT_MAX,c[][][],u[]={,,,-},v[]={,,-,};
bool b[][];
char dr[];
struct cll
{
int x,y,dir;
}tmp1,tmp2;
queue<cll>q;
map<char,int>mp;
int main()
{
mp['E']=,mp['S']=,mp['W']=,mp['N']=;
memset(c,-,sizeof(c));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
int t;
scanf("%d",&t);
if(t==)
b[i][j]=b[i-][j]=b[i][j-]=b[i-][j-]=;
}
scanf("%d%d%d%d%s",&sx,&sy,&dx,&dy,&dr);
tmp1.x=sx,tmp1.y=sy,tmp1.dir=mp[dr[]];
q.push(tmp1);
c[sx][sy][tmp1.dir]=;
while(!q.empty())
{
tmp1=q.front();
q.pop();
for(int i=;i<=;i++)//ǰ½ø
{
tmp2.x=tmp1.x+i*u[tmp1.dir],tmp2.y=tmp1.y+i*v[tmp1.dir],tmp2.dir=tmp1.dir;
if(tmp2.x>&&tmp2.x<n&&tmp2.y>&&tmp2.y<m&&!b[tmp2.x][tmp2.y])
{
if(c[tmp2.x][tmp2.y][tmp2.dir]==-)
{
q.push(tmp2);
c[tmp2.x][tmp2.y][tmp2.dir]=c[tmp1.x][tmp1.y][tmp1.dir]+;
}
}
else
break;
}
tmp2.x=tmp1.x,tmp2.y=tmp1.y;//תÏò
tmp2.dir=(tmp1.dir+)%;
if(c[tmp2.x][tmp2.y][tmp2.dir]==-)
{
q.push(tmp2);
c[tmp2.x][tmp2.y][tmp2.dir]=c[tmp1.x][tmp1.y][tmp1.dir]+;
}
tmp2.dir=(tmp1.dir+)%;
if(c[tmp2.x][tmp2.y][tmp2.dir]==-)
{
q.push(tmp2);
c[tmp2.x][tmp2.y][tmp2.dir]=c[tmp1.x][tmp1.y][tmp1.dir]+;
}
}
for(int i=;i<=;i++)
if(c[dx][dy][i]!=-)
ans=min(ans,c[dx][dy][i]);
if(ans==INT_MAX)
printf("-1\n");
else
printf("%d\n",ans);
return ;
}
洛谷 P1126 机器人搬重物的更多相关文章
- 洛谷P1126 机器人搬重物
洛谷1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格, ...
- 洛谷——P1126 机器人搬重物
P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...
- 洛谷 P1126 机器人搬重物 (BFS)
题目链接:https://www.luogu.org/problemnew/show/P1126 吐槽:这题很阴险 一开始没把格子图转化成点图:30分 转化成点图,发现样例过不去,原来每步要判断vis ...
- 洛谷P1126 机器人搬重物【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1126 题意: 给定一个n*m的方格,机器人推着直径是1.6的球在格子的线上运动. 每一秒钟可以向左转,向右转 ...
- 洛谷P1126机器人搬重物[BFS]
题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有些格子为不可移动的障碍.机 ...
- 洛谷—— P1126 机器人搬重物
https://www.luogu.org/problem/show?pid=1126 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机 ...
- luogu P1126 机器人搬重物 题解
luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...
- P1126 机器人搬重物
P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...
- luogu P1126 机器人搬重物
题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有些格子为不可移动的障碍.机 ...
随机推荐
- 【LeetCode-数组篇】 1 Two Sum
1 前言 之所以开始刷 LeetCode 上的算法题,一是快面临秋招,第二点是因为提升自己的编程能力,坚持两个月,希望博友们监督. 这个系列打算用 C# 和 Java 编程,为什么用两门语言,因为经历 ...
- handsontable 的核心方法
原文地址:http://blog.csdn.net/mafan121/article/details/46122577 1.为handsontable添加钩子方法 addHook(key,callba ...
- Centos7修改系统时区
timedatectl status Local time: 四 2014-12-25 10:52:10 CST Universal time: 四 2014-12-25 02:52:10 UTC R ...
- Python-序列化模块-json-62
序列化模块 Eva_J 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到 ...
- H5 59-浮动元素的脱标
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 对Vuejs框架原理名词解读
渐进式()+虚拟Dom: vue-cli 遍历Dom:先序遍历DOM树的5种方法! 三层架构+m v c +mvp+m v vm()+MVC,MVP 和 MVVM 的图示 剖析vue MVVM实现原理 ...
- 软件工程启程篇章:C#和四则运算生成与运算
0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of th ...
- Debian搭建WordPress
环境配置 可以使用apt-get快速安装mysql,php5:我是用源码手动安装apache服务器的.安装完mysql后,最好将字符编码设置为utf8的. 接下来就是mysql,apache,php5 ...
- 提高工作效率-window热键
一.虚拟桌面 Ctrl win D 创建另一个桌面 Ctrl win 左右箭头 来回切换桌面 Ctrl win F4 关闭当前虚拟桌面 二.窗口 win M ...
- [转帖]buffer与cache的区别
作者:沈万马链接:https://www.zhihu.com/question/26190832/answer/146259979来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...