代价树的广度优先搜索_广度优先搜索及其应用

本文深入探讨了代价树的广度优先搜索算法,解释了其原理并阐述了在实际问题中的应用。通过阅读,读者将了解如何在特定情境下有效地使用这一搜索策略。
摘要由CSDN通过智能技术生成

 预计阅读15min

天地不同方觉远,共天无别始知宽。

 ------------唐·曹松《南海》

广度优先搜索(Breadth-First Search,BFS)是最简单的图搜索算法之一,也是许多重要图算法的原型。prim的最小生成树算法和Dijikstra的单元最短路径算法都使用了类似广度优先搜索的思想。   本文的目的是阐述 BFS 的基本思想,并结合例题进行应用。
算法原理   给定图G(V,E) ,V 是节点集合, E是边集合,s为给定的源点。广度优先搜索对图G中的边 进行系统性的搜索来发现可以从源点s到达的所有结点(一个连通枝中的所有节点)   搜索的过程可以理解为按一定的层次来遍历与s之间存在通路的点。即最先访问的若干个点一定是直接与s相连的点,这些点访问完之后,再访问与刚才访问的节点相邻但还未访问的节点,也就是与s距离为2的节点,这样进行下去,直到连通枝中所有的节点都被访问。  
算法实现 以上的描述基本就是BFS的算法思想。我们现在看看如何实现。由于我们是要按层次遍历,必须要记住上一层有哪些节点,并且依次访问与这些节点相邻且还未访问的节点。我们要用到的数据结构是 队列,队列具有先进先出的特点,我们每访问一个节点,就把与之相邻的节点放进队列的末尾。 每次从队列中弹出队头的节点,并判断是否访问过,若为否,则标记为已访问,并把与之相邻的节点放入队列中;若为已访问,则丢弃。弹出下一节点。队列为空时结束。这时整个连通枝均已访问。   判断是否访问过也可以放在入队前,已经访问过的节点没必要再入队,因为先前的路径肯定是短一些的。  广度优先搜索的算法框架: 框架1(完全版)
/*假定图G(V,E)是以邻接表储存的。我们给每个节点赋予一些额外的属性:u.visited 标记节点u是否访问过。u.parent 储存u的前驱节点(可用来回溯路径),没有前驱时parent设为NULL。u.d用来储存从源节点到u之间的距离。*/BFS(G,s):   1.初始化变量,对G.V-{s}中的所有节点u
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值