BFS(个人的认知)

BFS

首先我们先来看一张图
在这里插入图片描述

如果我们用dfs,便是先序遍历:S L M N F F O P F Q F
而我们用bfs,则是一层层遍历: S L O M F P Q N F F F

我们想,如果结果是O的话,那么dfs则需要先遍历完所有的左子树,才可以找到结果,当数据较大时,dfs就会超时,所以我们采用bfs(广度优先搜索算)!!
**我们先来了解一下bfs一般来做那一类题目

  • 用深度优先搜索找最优解时必须搜索完所有路径,即使一个目标结点在很浅的树枝上,也得等到它左边所有结点均被搜索后才能找到它。用这种方法求某些最优解时,效率比较低。而广度优先搜索,能较好地解决这个问题。

  • 广度优先搜索是最简便和常用的图形搜索算法之一,从对图形的遍历来看,遵循“从浅入深”的搜索策略。在这种搜索过程中,树上的结点扩展是沿着深度的“断层”进行的,所以这种方法一定能保证找到最短(步数最少)的解答序列。在不少题中要求找到经历步骤最少而达到目标的方案时,多采用此种搜索方法
    **

    最优化问题!!

    **“广搜”所用的数据结构-队列:
    为了体现先生成先扩展的执行方式又能保留所有生成的结点以待进一步扩展,广度优先搜索在数据结构上引用了“队列”结构。队列是一种线性表,具有先进先出的特点,对于它所有的插入和删除操作分别仅在队列尾和队列首进行。定义两个“指针”变量head和tail,分别用来指向队列的头和尾。初始结点先入队,头指针指向待扩展结点,每生成一个子结点,则尾指针tail增加1,当前结点的所有子结点均生成后,头指针向后移动(即加1),位于head指针之前的(已被删除)为已扩展结点,tail指向所有已生成结点的最后一个。若head指针大于tail指针,表示所有解答树上的结点已产生。如果目标结点仍求出现,说明“无解”。
    **
    在这里插入图片描述

原理解释:

在这里插入图片描述
下标 1 2 3 4 5 6 7 8 9 10 11
father 0 1 1 2 2 3 3 4 5 6 7 8
state S L O M F P Q N F F F

模板:

广度优先搜索的算法描述:
其中,max为产生子结点的规则数:
program BFS
初始化,初始状态存入OPEN表;
队列首指针head=0;尾指针tail=1;
do {
	 指针head后移一位,指向待扩展结点(head++);
	 for I = 1 to max 
		  if 子结点符合条件 
			    tail指针增1,把新结点存入队列尾;
			    if 新结点与原已产生的结点重复 then 删去该结点(取消入队,tail减1)else
			    if 新结点是目标结点 then 输出并退出;
} while (head>=tail);

在这里插入图片描述
在这里插入图片描述

谢谢

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值