BFS:迷宫问题

题目

在这里插入图片描述

这是一个基础广搜。先将起始位置入队列

每次从队列拿出一个元素,扩展其相邻的4个元素入队列(要判重),(开一个二维数组,可以让里面的元素跟他对应。)
直到队头元素为终点为止。队列里的元素记录了指向父节点(上一步)的指针

队列元素:
struct{
int r,c;
int f;//父节点在队列中的下标
};

在这套题目里面不能用STL的queue或者deque,要自己写(因为一个元素从队头删除,则再也找不到了,而我们这里要记录从起点到终点路径上面的每一个节点,让他进行输出)。用一维数组实现,维护一个队头指针和队尾指针。所有进入到队列的元素,都可以在队列里面不会删除,我们还会找到他

从队列删除一个元素,实际上就是队头元素往右移,相当于删除了,但上一个还在队列里面没有动
在这里插入图片描述
因为题目要记录路径,每一次扩展出来之后,要让进队尾,还要写一个f,指向父节点的指针
f存放是修改之前的下标
在这里插入图片描述
起点和终点相同,即找到了,之后找到上一个父节点,之后再找出路
在这里插入图片描述

迷宫问题的变形–鸣人和佐助

在这里插入图片描述

这个题目的状态是什么?
上一个题目就是(x,y)一个坐标
而这里的状态就是一个三维数组,(x,y,k),鸣人所在的行,列,和查克拉数量

如果队头节点扩展出来的节点是有大蛇手下的节点,则其k值比队头的k值要比队头的k要剪掉1.如果队头节点的查克拉数量为0,则不能扩展出有大蛇手下的节点。

求钥匙的鸣人

在这里插入图片描述
状态:
(r,c,keys):鸣人的行,列,已经拥有的钥匙种数
目前状态(x,y,k)(x,y)是佐助呆的地方
如果队头节点扩展出来的节点上面有不曾拥有的某种钥匙,则该节点的keys比队头节点的keys要加1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上Claire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值