首页 > 编程知识 正文

图的创建和遍历c语言,c语言深度搜索算法

时间:2023-05-03 18:49:14 阅读:50905 作者:1651

1 .前言

BFS(breadthfirstsearch,宽度优先搜索,别名宽度优先搜索) )与深度优先算法在一个节点上“死到底”的想法不同,宽度优先算法关注的是各层节点对下一层的访问。

2. BFS算法介绍

BFS算法和核心思想是,从一个点开始,它一直走完它的邻点,然后选择一个邻点,走完它相邻的未扫描点,如此一来,它就把所有节点都走完了。 类似于树木层序的遍历。

BFS的核心是将状态存储在当前何处,并将状态传递到队列进行入队操作,因此,

算法步骤(在队列中实现) ) ) ) ) ) ) ) )。

a )访问指定的起点。

b )访问当前顶点的相邻顶点有未访问的顶点,对其进行排队。

c )删除队列的第一个节点。 访问当前队列的开头、上一步。 直到队列空了。

d )如果中途还没有访问顶点,则选择另一个点作为起点顶点。 重复前面的步骤。 (相对于非连通图)。

3 .案例图标

果然这张图,我们会直接用案例说明。 对于此图,其访问顺序为(不是唯一的)1-2-3-4-5

可以先从1开始,从一个节点访问两个节点: 2、3。 使用它对两个节点的访问顺序进行排队,然后进行入队(例如2、3 )。 然后进入状态2,依次访问两个节点的下两个节点(4、5 ),进入4、5 ),然后进入三个节点,依次访问下一个节点。 此时,发现了所有的节点

4 .相关代码

BFS的模板代码如下: /**

*返回适当的搜索数据

*/

int bfs (节点根,节点目标) )。

{

队列队列; //排队

intstep=0; //当前队列的步骤点

//initialize

addroottoqueue;

//BFS

while (队列侦听程序)。

{

步骤=步骤1;

//步数逐渐增加

intsize=queue.size (;

for(inti=0; I

{

Nodecur=thefirstnodeinqueue;

ifcuristarget

返回步骤- 1;

节点下一步:以太网边界(for )。

//在此多以二维方向排列来实现

addnexttoqueue;

}

removethefirstnodefromqueue;

}

}

返回- 1; //错误返回值

}

同样提供了BFS的图解法摘录,代码的最核心还是取记忆BFS的模板,根据实际情况加以利用,以下代码仅供参考: VoidBFSL(intpos,pGraphG,intvisited () )

{

intqueue[G-Vnum]; //固化辅助BFS导线测量

inthead=0,tail=0; //团队领导,团队指针

Arcnode*p;

队列[ tail ]=销售点;

可视[ pos ]=1; //标记遍历了

泰伊尔;

wile (头!=tail )

{

pos=queue[head]; //出队操作

头;

printf('%d ',pos );

p=G-vertice[pos].firstarc;

while(p!=空)

{

if (可视[ p-adjvex ]==0)//判断是否进行了遍历

{

queue[tail]=p-adjvex; //入队操作

可视[ p-adjvex ]=1; //标记遍历了

泰伊尔;

}

p=p-next;

}

}

}

5 .应用

BFS算法的实用场景通常是地图搜索、迷宫搜索等,需要具有“状态”和状态变化场景的搜索算法,同时BFS不需要像DFS算法那样回溯,因此可能比DFS更高效基于BFS算法的改进算法的场景,例如r stark算法、双向宽搜索(DBFS )算法等,已经应用于实际的游戏设计、GPS导航设计等场景。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。