题目描述

机器人移动学会(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:

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

12
bfs,格化点
#include<cstdio>
#include<algorithm>
#include<queue>
#include<iostream> using namespace std;
const int N = ; struct node{
int x,y,step;
int to;
}cur,nxt;
queue<node>q;
int a[N][N];
int mp[N][N];
int dx[]={,,,-};
int dy[]={,,-,};
bool v[N][N][];
int n,m,k,sx,sy,ex,ey;
char ch; void bfs()
{
if(sx==ex&&sy==ey)
{
printf("0\n");
return ;
}
cur.x=sx;
cur.y=sy;
cur.step=;
switch(ch)
{
case 'E': cur.to=;break;
case 'S': cur.to=;break;
case 'W': cur.to=;break;
case 'N': cur.to=;break;
}
q.push(cur);
v[sx][sy][cur.to] = true;
while(!q.empty())
{
cur = q.front() ;
q.pop();
k = cur.to;
for(int i=;i<=;++i)
{
int xx=cur.x+i*dx[k];
int yy=cur.y+i*dy[k];
if(xx>&&xx<n&&yy>&&yy<m&&!mp[xx][yy])
{
if(xx==ex&&yy==ey)
{
printf("%d\n",cur.step+);
return;
}
if(!v[xx][yy][k])
{
v[xx][yy][k]=;
nxt.x=xx;
nxt.y=yy;
nxt.step=cur.step+;
nxt.to = k;
q.push(nxt);
}
}
else break;
}
nxt.x = cur.x;
nxt.y = cur.y;
nxt.step = cur.step+;
nxt.to = (cur.to+)%;
if(!v[nxt.x][nxt.y][nxt.to])
{
v[nxt.x][nxt.y][nxt.to] = true;
q.push(nxt);
}
nxt.to = (cur.to-+)%;
if(!v[nxt.x][nxt.y][nxt.to])
{
v[nxt.x][nxt.y][nxt.to] = true;
q.push(nxt);
}
}
printf("-1\n");
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
scanf("%d",&a[i][j]);
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
cin>>ch;
sx++; sy++; ex++; ey++;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
if(a[i][j]==)
{
mp[i][j] = ;
mp[i+][j] = ;
mp[i][j+] = ;
mp[i+][j+] = ;
}
n++;
m++;
bfs();
return ; }

luogu P1126 机器人搬重物的更多相关文章

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

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

  2. P1126 机器人搬重物

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

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

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

  4. 洛谷P1126 机器人搬重物

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

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

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

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

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

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

    https://www.luogu.org/problem/show?pid=1126 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机 ...

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

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

  9. 洛谷 P1126 机器人搬重物

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

随机推荐

  1. MySQL DELAY_KEY_WRITE Option

    delay_key_write   This option applies only to MyISAM tables. It can have one of the following values ...

  2. javascript中arguments的应用——不定项传参求和

    <script type="text/javascript"> window.onload=function(){ function sum(){ var result ...

  3. bzoj4128 Matrix

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 [题解] 矩阵版本的BSGS. 至于如何不需要求逆,详见:http://www.cnb ...

  4. autoKeras Windows 的入门测试

    在测试中分析一下ide的效果,在pycharm中测试的时候老师提示内存溢出,而且跑autoKeras的cnn时确实消耗很大空间.但是同样的电脑,换了vscode进行测试的时候没有问题.我也不知道什么回 ...

  5. Python学习笔记 - day3 - 数据类型及运算符

    Python的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...

  6. Objective-C中ORM的运用:实体对象和字典的相互自动转换

    http://blog.csdn.net/cooldragon/article/details/18991973 iOS开发中基于ORM的框架很多,如SQLitePersistentObject,实际 ...

  7. 使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

    转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 ...

  8. python访问网站

    #!/usr/bin/env python # encoding: utf-8 from functools import wraps import requests from lxml import ...

  9. sql 获取字符串首字母,循环

    //字符串首字母 CREATE FUNCTION GetInitialLetter(@ChineseString NVARCHAR()) RETURNS NVARCHAR() AS BEGIN DEC ...

  10. 在什么情况下Java比C++快?

    转载   http://www.importnew.com/16056.html