Code前端首页关于Code前端联系我们

图遍历:BFS广度优先搜索算法C语言代码示例

terry 2年前 (2023-09-27) 阅读数 84 #数据结构与算法

1。简介

BFS(Breadth First Search,广度优先搜索,又称广度优先搜索),和深度优先算法在节点“粘在一起”毕竟是不同的思想。广度优先算法关注的是每一层节点对下一层的访问。 ?重复遍历所有节点。类似于树的层序遍历。

BFS 核心将当前位置存储为状态,并将该状态用于队列进行入队操作。因此,

算法步骤(在队列中执行)

a) 访问指定的起点。

b) 从当前未打开的顶点开始访问相邻顶点,放入队列中。

c) 删除队列的头节点。访问队列的当前头,即上一步。直到队列为空。

d) 如果路径上仍有未访问的节点,请选择另一个点作为起点。重复上一步。 (对于断开连接的图)。

3。案例图

这仍然是一个示例图。我们直接用案例来解释。根据该图,访问顺序可以是(不唯一): 1-2-3-4-5

图的遍历:BFS广度优先搜索算法C语言代码示例

First of 1,节点 1 可以访问两个节点 2 和 3。我们访问并使用它来放置访问两个节点入队的顺序,然后按照进入队列的顺序(比如2、3),然后我们将状态2出队,从节点2开始按顺序访问接下来的两个节点(节点4、5),并且join到节点4、5,然后我们将节点3出列,按顺序访问后面的节点,此时发现所有节点都已经打开了,就可以完成查找了。最后,我们得到顺序:1-2-3-4-5

4。相关代码

BFS模板代码如下:

/*** 返回匹配的搜索数据* 返回匹配的搜索数据 ♷*/ BFS(节点根,节点目标) {Queue 队列; //创建队列 int step = 0; //当前队列步点 //初始化 将根添加到队列;♸♶ ♸♶ while (队列不为空) { 步长=步长+1; size = queue.size(); i {             节点 cur = 队列中的第一个节点;

当前是目标 返回 步骤 - 1;? 添加到队列旁边;       } * }

-1; //错误返回值}

还提供了BFS图论算法的摘录。代码的重点是记住BFF模板,根据实际情况灵活使用,所以下面的代码仅供参考

1234567891011121314151617181920212223242526void (int pos,pGraph G,intopen[30])//从后点出发深度优先遍历无向图 ‽

int 队列[G->Vnum]; ///队列BFS遍历 int =0; //队列头尾指针 Arc节点* p; queue[tail] =pos; queue[tail]=pos; ]♶♶ ♶♽/d tail++; 同时(头!=尾) {       ];//操作出队 head++; ;

" %d ",pos); p=G->顶点[pos].firstarc; (p!=NULL) {       (visited[p->adjvex]==0)//判断是否已被跳过 queue[tail]=p->adjvex;‹ 加入队伍Opened [p - > 副词] = 1; // 十字标记tail ++; }

p = p-> 下一步; } }}} }5.使用

BFS算法的真实应用场景,最典型的地图搜索、迷宫搜索路径等,必须有“状态”以及针对状态变化场景的搜索算法。同时,BFS不需要像DFS算法那样进行回溯,因此可以比DFS更加高效。该算法基于BFS算法,如Rockstar寻路、DBFS算法(双向广搜索)以及更好的算法场景应用于真实游戏设计、GPS导航设计等场景。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门