题目链接:https://www.luogu.org/problemnew/show/P1126

思路:很不错的搜索题,用BFS,虐了我1天多才A掉 QAQ,细节很多。

   1.每个状态包含行、列、方向、步数。

   2.需要将格点图转换为点图。

   3.注意边界不能走。

   4.最后是折磨了大半天的,救赎最后输入的字符,我最开始是写的scanf("%d%d%d%d%c",&sr,&sc,&er,&ec,&d)。我一直在找算法部分的bug,怎么也没想到竟然是它没有读到输入的字符,而读的是空格。因为scanf虽然在读数据会吃掉空格和换行,但只有scanf读char时不会吃掉空格和换行,虽然以前碰到过一次,但还是没意识到啊...解决办法是在%c前加一个空格就行,吸取教训了,血的教训。

AC代码如下:

 #include<cstdio>
#include<queue>
#include<iostream>
using namespace std; struct cur{
int r,c,dir,step;
}tmp;
queue<cur> q;
int gr[][]={{-,-,-},{,,},{,,},{,,}};
int gc[][]={{,,},{,,},{,,},{-,-,-}};
int n,m,sr,sc,er,ec;
int a[][];
bool vis[][][]; void bfs(){
q.push(tmp);
while(!q.empty()){
cur now=q.front();q.pop();
int nr=now.r,nc=now.c,nd=now.dir,ns=now.step;
if(nr==er&&nc==ec){
printf("%d\n",ns);
return;
}
for(int i=;i<;i++){
int rr=nr+gr[nd][i],cc=nc+gc[nd][i];
if(rr<=||cc<=||rr>=n||cc>=m||a[rr][cc])
break;
if(!vis[rr][cc][nd]){
tmp.r=rr,tmp.c=cc,tmp.dir=nd,tmp.step=ns+;
vis[rr][cc][nd]=true;
q.push(tmp);
}
}
for(int i=-;i<=;i+=){
tmp.r=nr,tmp.c=nc;
int dd=nd+i;
if(dd==)dd=;
if(dd==-)dd=;
tmp.dir=dd;
tmp.step=ns+;
if(!vis[nr][nc][dd]){
vis[nr][nc][dd]=true;
q.push(tmp);
}
}
}
printf("-1\n");
} int main(){
int x;
char d;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&x);
if(x)
a[i][j]=a[i-][j]=a[i-][j-]=a[i][j-]=;
}
scanf("%d%d%d%d",&sr,&sc,&er,&ec);
scanf(" %c",&d);
if(a[er][ec]){
printf("-1\n");
return ;
}
tmp.r=sr,tmp.c=sc;
switch(d){
case 'N':tmp.dir=;break;
case 'E':tmp.dir=;break;
case 'S':tmp.dir=;break;
case 'W':tmp.dir=;
}
tmp.step=;
vis[sr][sc][tmp.dir]=true;
bfs();
return ;
}

LuoguP1126 机器人搬重物(BFS)的更多相关文章

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

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

  2. 机器人搬重物(BFS)

    机器人搬重物 时间限制: 1 Sec  内存限制: 128 MB提交: 22  解决: 10[提交][状态][讨论版] 题目描述 机 器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一 ...

  3. 洛谷P1126 机器人搬重物

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

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

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

  5. P1126 机器人搬重物

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

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

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

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

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

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

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

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

    题目大意:给定一个 N 行,M 列的地图,一个直径为 1.6 的圆形机器人需要从起点走到终点,每秒钟可以实现:向左转,向右转,向前 1-3 步.求从起点到终点最少要多长时间. 题解:相比于普通的走迷宫 ...

随机推荐

  1. Oracle学习操作(3)

    一.if条件语句 set serverout on; ; v ):='world'; begin dbms_output.put_line('hello'||n||v); end; / hello1w ...

  2. DNS 解释 --- 解析域名给电脑,电脑只看得懂1.1.1.1.1 这些ip地址 所以要翻译给他

    把域名翻译成IP地址的软件称为域名系统,即DNS 当网络上的一台客户机需要访问某服务器上的资源时,客户机的用户只需要在浏览器中的地址文本框中输入该服务器的网址.就可以与该服务器进行连接,计算机的硬件只 ...

  3. [UE4]ue4 FString 中文乱码问题

    使用FString出现乱码,最简单的情况,FString Str = "你好"; 这时候就会出现乱码,解决方法是改成这样 FString Str = TEXT("你好&q ...

  4. 基于Vue的Ui框架

    基于Vue的Ui框架 饿了么公司基于vue开的的vue的Ui组件库 Element Ui 基于vue pc端的UI框架 http://element.eleme.io/ MintUi 基于vue 移动 ...

  5. 第3课 进化后的 const分析

    1.  C语言中的const (1)const修饰的变量是只读的,使得变量具有只读属性,但本质还是变量.所以不是真正的常量,它只是告诉编译器该变量不能出现在赋值符号的左边. (2)const修饰的局部 ...

  6. 【Linux_Unix系统编程】chapter7 内存分配

    Chapter7 内存分配本章将用于在堆或者栈上分配内存的函数.7.1 在堆上分配内存 通常将堆的当前的内存边界称为"program break" 7.1.1 调整program ...

  7. storm项目优化

    实现监控脚本监控topology运行状态

  8. ACM MM | 中山大学等提出HSE:基于层次语义嵌入模型的精细化物体分类

    细粒度识别一般需要模型识别非常精细的子类别,它基本上就是同时使用图像全局信息和局部信息的分类任务.在本论文中,研究者们提出了一种新型层次语义框架,其自顶向下地由全局图像关注局部特征或更具判别性的区域. ...

  9. DOM实战-js todo

    1.需求: 实现一个如下页面: 最上面是输入框,后面是add按钮,输入文本点击add按钮,在下面就会出现一行,下面出现的每行最前面是两个按钮,然后后面是todo(要做的事) 第一个按钮是完成按钮,第二 ...

  10. Notepad++配置c++编译环境

    博主学生狗一只,之前一直进行.net开发,用惯了微软的那一套.C#上手容易,开发起来简单,但是正如前辈们所说的,它隐藏了太多底层的东西,惯坏了我,导致快毕业了有些东西一无所知.同时自己想写点简单的算法 ...