数据结构(C++)——图的遍历算法:广度优先搜索、深度优先搜索、优先级搜索算法

编程入门 行业动态 更新时间:2024-10-06 10:37:20

数据结构(C++)——图的遍历<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法:广度优先搜索、深度优先搜索、优先级搜索算法"/>

数据结构(C++)——图的遍历算法:广度优先搜索、深度优先搜索、优先级搜索算法

图的遍历算法

图的遍历都可以理解为,将非线性结构转化为半线性结构的过程。经遍历而确定的边类型中,最重要的一类即所谓的树边,它们与所有顶点共同构成了原图的一棵支撑树(森林),称作遍历树(traversal tree)。

 

 

广度优先搜索(BFS)

广度优先搜索(breadth-first search, BFS)采用的策略,可概括为:

    越早被访问到的定点,其邻居越优先被选用

 

于是,始自图中顶点s的BFS搜索,将首先访问顶点s;再依次访问s所有尚未访问到的邻居;再按后者被访问的先后次序,逐个访问它们的邻居;...;如此不断。在所有已访问到的顶点中,仍有邻居尚未访问者,构成所谓的波峰集(frontier)。

    广度优先搜索类似与树的层次遍历。

 

广度优先搜索算法实现:(BFS算法)

template <typename Tv, typename Te> //广度优先搜索BFS算法(全图)
void Graph<Tv, Te>::bfs(int s) { //assert: 0 <= s < nreset(); int clock = 0; int v = s; //初始化do //逐一检查所有顶点if (UNDISCOVERED == status(v)) //一旦遇到尚未发现的顶点BFS(v, clock); //即从该顶点出发启动一次BFSwhile (s != (v = (++v % n))); //按序号检查,故不漏不重
}template <typename Tv, typename Te> //广度优先搜索BFS算法(单个连通域)
void Graph<Tv, Te>::BFS(int v, int& clock) { //assert: 0 <= v < nQueue<int> Q; //引入辅助队列status(v) = DISCOVERED; Q.enqueue(v); //初始化起点while (!Q.empty()) { //在Q变空之前,不断int v = Q.dequeue(); dTime(v) = ++clock; //取出队首顶点vfor (int u = firstNbr(v); -1 < u; u = nextNbr(v, u)) //枚举v的所有邻居uif (UNDISCOVER

更多推荐

数据结构(C++)——图的遍历算法:广度优先搜索、深度优先搜索、优先级搜索算法

本文发布于:2024-02-27 22:49:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1766645.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   遍历   优先级   数据结构   广度

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!