图遍历:BFS广度优先搜索算法C语言代码示例
1。简介
BFS(Breadth First Search,广度优先搜索,又称广度优先搜索),和深度优先算法在节点“粘在一起”毕竟是不同的思想。广度优先算法关注的是每一层节点对下一层的访问。 ?重复遍历所有节点。类似于树的层序遍历。
BFS 核心将当前位置存储为状态,并将该状态用于队列进行入队操作。因此,
算法步骤(在队列中执行)
a) 访问指定的起点。
b) 从当前未打开的顶点开始访问相邻顶点,放入队列中。
c) 删除队列的头节点。访问队列的当前头,即上一步。直到队列为空。
d) 如果路径上仍有未访问的节点,请选择另一个点作为起点。重复上一步。 (对于断开连接的图)。
3。案例图
这仍然是一个示例图。我们直接用案例来解释。根据该图,访问顺序可以是(不唯一): 1-2-3-4-5
![]()
First of 1,节点 1 可以访问两个节点 2 和 3。我们访问并使用它来放置访问两个节点入队的顺序,然后按照进入队列的顺序(比如2、3),然后我们将状态2出队,从节点2开始按顺序访问接下来的两个节点(节点4、5),并且join到节点4、5,然后我们将节点3出列,按顺序访问后面的节点,此时发现所有节点都已经打开了,就可以完成查找了。最后,我们得到顺序:1-2-3-4-5
4。相关代码
BFS模板代码如下:
/*** 返回匹配的搜索数据* 返回匹配的搜索数据 ♷*/ |
当前是目标 返回 步骤 - 1;? 添加到队列旁边; } * }
-1; //错误返回值}
还提供了BFS图论算法的摘录。代码的重点是记住BFF模板,根据实际情况灵活使用,所以下面的代码仅供参考
| 1234567891011121314151617181920212223242526 | void (int pos,pGraph G,intopen[30])//从后点出发深度优先遍历无向图 ‽ |
int BFS算法的真实应用场景,最典型的地图搜索、迷宫搜索路径等,必须有“状态”以及针对状态变化场景的搜索算法。同时,BFS不需要像DFS算法那样进行回溯,因此可以比DFS更加高效。该算法基于BFS算法,如Rockstar寻路、DBFS算法(双向广搜索)以及更好的算法场景应用于真实游戏设计、GPS导航设计等场景。队列[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.使用
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网