bfs和dfs算法原理数据结构,有向图的dfs和bfs序列
举例说明BFS算法和DFS算法BFS算法的概念和实现过程Python代码实现
Bf算法
BFS类似于树的层次遍历过程。它从根节点开始,沿着树的宽度遍历树的节点。如果所有节点都被访问,算法将被中止。
放弃空间,改变时间。
算法
队列(先进先出)
1.创建一个空队列(用于存储节点)和一个空访问列表(用于存储已访问的节点)
2.在队列和访问中依次添加起点和邻点。
3.poo队列中的第一个节点,并从图中获得该节点的相邻点。
4.当邻居不在访问中时,将邻居添加到队列中并进行访问。
5.出现输出弹出的节点
6.重复3、4和5,直到队列为空。
实现过程如图所示,从。
1.一个队列
2.当A从队列中出来时,A的邻居节点B、C和D进入队列。
3.当B出队列时,相邻节点A的E和F,B的E和F排队。
4.当C出队列时,C的邻居节点A,D,F,G,其中G不排队,进入队列。
5.D出列时,D的邻居节点A、C、G都在队列中。
6.出了E列,邻节点都在列中。
7.在F列之外,所有相邻节点都在该列中。
8.在G列之外,所有相邻节点都在该列中。
结果是
Python代码的安装用字典结构来表示。
graph={ A : [B , C , D], B : [A , e , F], C : [A , D , F
Deffs (start,graph):queue=[]visit=[]queue . append(start)visit . append(start)while queue 3360 node=queue . pop(0)
算法DFS沿着树的深度遍历树的节点,
选择一条路径到底,追踪所有子节点,达到全局搜索的目的。
算法
栈(先进后出)
类似于BFS,但有一点变化。
1.创建一个空堆栈stack(存储节点)和一个空列表visit(存储已访问的节点)。
2.将起点和相邻点叠加,依次访问。
3.最后,进入poo堆栈的节点从图中获得其节点的相邻点
4.当相邻点不在访问中时,将相邻点添加到堆栈并访问。
5.出现输出弹出的节点
6.重复3、4和5,直到堆栈为空。
实现过程如图所示,从。
1、a入栈
2.当A离开堆栈时,A的相邻节点B、C和D进入堆栈。
3.当D出栈时,未入栈的G在D的相邻节点A、C、G中入栈。
4.当G离开堆栈时,G的邻居节点C和D已经进入堆栈。
5.当C离开堆栈时,不在C的相邻节点A、D、F、G中的F进入堆栈。
6.离开F栈,相邻节点已经进入栈。
7.出B栈,相邻节点E入栈。
8.退出电子堆栈
结果是
Python代码是graph={ A: [B , C , D], B: [A , e , F], C: [A, D]graph)3360 stack=[]visit=[]stack . append(start)visit . append(start)while stack:node=stack . pop)nop for iin nodes 3360 ifinoinvisit 360 ststats