广度优先搜索(BFS)进阶之双向广度优先搜索

        在上一篇文章中树以及树的遍历:宽度优先搜索BFS c++的代码实现-优快云博客,我们提到了广度优先搜索,即宽度优先搜索(BFS),具体的BFS的实现以及原理,大家可以看回上一篇文章。在本篇我们将会讲双向广搜。

        适用场景:有确定的起点以及终点,并且能将从起点到终点的单向搜索,转换成分别从起点和终点出发的相遇问题,那么在这种情况下,如果单向的BFS会超时,那么可以优先考虑双向广搜,以此减少时间复杂度。

        在上篇文章中我们也讲到BFS的实现,那么接下来我们对比一下BFS和双向广搜的代码,以及所搜索的节点的个数来比较。

        在这由于需要,我们要将树的定义更改一下,具体如下:

typedef struct mytree{
	int data;
	bool flag=false;
	struct mytree *father,*lson,*rson;
}mt;

        或许有读者会问,为什么要加一个布尔的flag和*father。其实很简单,flag用来判断这个节点是否被搜索过,方便判断有没有相遇;而*father就是该节点的父节点。

        至于树的初始化在这就省略了,具体的可以看上篇文章。

        接下来就是双向广搜的实现过程了,代码如下:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值