热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

hdu1254推箱子搜索水题(bfs+bfs)

题意就不多说了我使用bfs+bfs做的听说bfs+dfs也能做我觉得都差不多我就说一下bfs+bfs注意:箱子走过的地方还能再走但从同

  题意就不多说了

  我使用bfs+bfs做的      听说bfs+dfs也能做   我觉得都差不多     我就说一下bfs+bfs

注意:箱子走过的地方还能再走   但从同一方向过来的就不能再走了    所以  标记时  得同时记录箱子和方向    方向可以根据人的位置来判断

箱子能往某一方向推的两个条件是: 目的地是空的    人能推动及人能到达要推的地方 

 然后按照一般广搜做就行

#include
#include
#include
#include
using namespace std;

struct
node
{

int
x,y,step;
int
peox,peoy;
}
a,b;
struct
Node
{

int
x,y;
}
p,q;
int
dir[4][2]={0,1,0,-1,1,0,-1,0};
int
map[10][10],n,m;
int
mark[10][10][10][10];
int
judge_bfs(int starx,int stary,int endx,int endy,int tx,int ty)//判断人能否到达
{

p.x=starx;
p.y=stary;
int
leap[10][10];
memset(leap,0,sizeof(leap));
leap[p.x][p.y]=1;
queue<Node>P;
P.push(p);
while
(!
P.empty())
{

q=P.front();
P.pop();
if
(
q.x==endx&&q.y==endy)
return
1;
for
(int
i=0;i<4;i++)
{

p.x=q.x+dir[i][0];
p.y=q.y+dir[i][1];
if
(
p.x<1||p.x>n||p.y<1||p.y>m) continue;
if
(
p.x==tx&&p.y==ty) continue;
if
(
leap[p.x][p.y]==0&&map[p.x][p.y]!=1)
{

leap[p.x][p.y]=1;
P.push(p);
}
}
}

return
0;
}

int
bfs(int starx,int stary,int peox,int peoy)//搜箱子
{

int
i;
a.x=starx;
a.y=stary;
a.peox=peox;
a.peoy=peoy;
a.step=0;
memset(mark,0,sizeof(mark));
mark[a.x][a.y][a.peox][a.peoy]=1;
queue<node>Q;
Q.push(a);
while
(!
Q.empty())
{

b=Q.front();
Q.pop();
if
(
map[b.x][b.y]==3)
{

return
b.step;
}

for
(
i=0;i<4;i++)
{

a.x=b.x+dir[i][0];
a.y=b.y+dir[i][1];
a.step=b.step+1;
if
(
a.x<1||a.x>n||a.y<1||a.y>m) continue;
if
(
map[a.x][a.y]==1) continue;
if
(
mark[a.x][a.y][b.x][b.y]) continue;
if
(
i==0)
{

if
(
b.y-1>=1&&map[b.x][b.y-1]!=1&&judge_bfs(b.peox,b.peoy,b.x,b.y-1,b.x,b.y))
{

a.peox=b.x;
a.peoy=b.y;
mark[a.x][a.y][a.peox][a.peoy]=1;
Q.push(a);
}
}

else if
(
i==1)
{

if
(
b.y+1<=m&&map[b.x][b.y+1]!=1&&judge_bfs(b.peox,b.peoy,b.x,b.y+1,b.x,b.y))
{

a.peox=b.x;
a.peoy=b.y;
mark[a.x][a.y][a.peox][a.peoy]=1;
Q.push(a);
}
}

else if
(
i==2)
{

if
(
b.x-1>=1&&map[b.x-1][b.y]!=1&&judge_bfs(b.peox,b.peoy,b.x-1,b.y,b.x,b.y))
{

a.peox=b.x;
a.peoy=b.y;
mark[a.x][a.y][a.peox][a.peoy]=1;
Q.push(a);
}
}

else

{

if
(
b.x+1<=n&&map[b.x+1][b.y]!=1&&judge_bfs(b.peox,b.peoy,b.x+1,b.y,b.x,b.y))
{

a.peox=b.x;
a.peoy=b.y;
mark[a.x][a.y][a.peox][a.peoy]=1;
Q.push(a);
}
}
}
}

return
0;
}

int
main()
{

int
i,j,T,starx,stary,peox,peoy;
scanf("%d",&T);
while
(
T--)
{

scanf("%d%d",&n,&m);
for
(
i=1;i<=n;i++)
for
(
j=1;j<=m;j++)
{

scanf("%d",&map[i][j]);
if
(
map[i][j]==2)
{

starx=i;
stary=j;
}

if
(
map[i][j]==4)
{

peox=i;
peoy=j;
}
}

//printf("%d %d %d %d\n",starx,stary,peox,peoy);
int flash=bfs(starx,stary,peox,peoy);
if
(!
flash) printf("-1\n");
else
printf("%d\n",flash);
}

return
0;
}


推荐阅读
  • 本文讨论了同事工资打听的话题,包括同工不同酬现象、打探工资的途径、为什么打听别人的工资、职业的本质、商业价值与工资的关系,以及如何面对同事工资比自己高的情况和凸显自己的商业价值。故事中的阿巧发现同事的工资比自己高后感到不满,通过与老公、闺蜜交流和搜索相关关键词来寻求解决办法。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 微软发布OneNote for WordPress插件,支持一键从OneNote获取内容发布
    微软今日发布了OneNoteforWordPress插件,该插件支持从OneNote一键获取 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Pycharm编辑器取消双击shift弹出搜索框的方法
    在使用Pycharm编辑器时,双击shift会弹出搜索框界面,导致输入失去焦点,给用户带来不便。本文介绍了取消双击shift弹出搜索框的方法:在Pycharm中双击shift,输入registry并回车,找到“ide.suppress.double.click.handler”并勾选后,关闭即可解决该问题。通过这个方法,你再也不会被shift问题困扰了。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • d3dx9_26.dll极品飞车9修复工具下载及修复教程
    本文介绍了d3dx9_26.dll文件的修复工具下载和修复教程,解释了该dll文件的作用和安装方法,同时提供了其他dll文件下载安装的方法。文章涵盖了3d、windows、p2p、dll、visual studio等知识点,并由未来可期1212投稿。希望该技术和经验能帮到你解决dll文件相关技术问题。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 索引库类似于查字典的检索表或图书馆的书目检索,是搜索引擎将抓取的网页放入的地方。索引库通过词语来分类,利用固定数量的词语进行分类,方便搜索引擎匹配用户查询的词语。本文介绍了索引库的分类方式及其好处。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
author-avatar
荧光绿的包包
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有