图解BFS算法和DFS算法BFS算法构想实现过程Python码实现DFS算法构想实现过程Python码实现
BFS算法
BFS与树的分层遍历过程类似,它从根节点开始,沿树的宽度遍历树的节点。 如果所有节点都被访问,算法将中止。
放弃空间改变时间。
算法思路队列(先进先出)
1 .创建空队列queue (用于存储节点)和空列表visit (用于存储已访问的节点)
2、在queue和visit中依次添加起点和邻点
3、对队列中最先进入的节点进行poo,从图中获取该节点的邻接点
4、邻点不在visit时,将该邻点添加到queue和visit
5、出现输出pop的节点
6、重复3、4、5直到队列为空
实现过程如图所示,从a开始
1、a排队
2、a从队列出来时,a的相邻节点b、c、d进入队列
3、b从队列出来时,b的相邻节点a、e、f中未排队的e、f进行排队
4、c从队列出来时,c的相邻节点a、d、f、g、其中没有排队的g进入队列
5、d出列时,d的相邻节点a、c、g都进了列
6、出了e列,相邻节点都进了列
7、出了f列,相邻节点都进了列
8、出了g列,相邻节点都进了列
结果: A B C D E F G
Python代码的安装用词典结构表示
graph={ 'A' : ['B ',' c ',' D'],' B' : ['A ',' e ',' F'],' C' : ['A ',' d ',' f '
defb fs (开始, graph ) : queue=[ ] visit=[ ] queue.append (start ) visit.append (start ) whilequeue3360node=queue.pop(0)
DFS算法DFS沿树的深度遍历树的节点,
选择一条路走到最后,追溯所有子节点,达到全局搜索的目的。
算法思路栈(先进后出)
与BFS相似,只是有点变化
1、制作空的堆栈stack (为了存储节点)和空的列表visit (为了存储访问的节点)
2、将起点和邻点依次添加到stack和visit
3、最后进入poo堆栈的节点从图中获取其节点的邻接点
4、邻接点不在visit时,将该邻接点添加到stack和visit
5、出现输出pop的节点
6、重复3、4、5直到堆栈清空
实现过程如图所示,从a开始
1、a进栈
2、a出栈时,a的相邻节点b、c、d进入栈
3、d离开堆栈时,d的相邻节点a、c、g中没有进入堆栈的g进入堆栈
4、g离开堆栈时,g的相邻节点c、d已经进入了堆栈
5、c离开堆栈时,c的邻接节点a、d、f、g中没有进入堆栈的f进入堆栈
6、离开f栈,相邻节点已进入栈
7、走出b栈,相邻节点e进入栈
8、出e栈
结果: A D G C F B E
Python代码是graph={ 'A' : ['B ',' c ',' D'],' B' : ['A ',' e ',' F'],' C' : ['A,' d ] graph ) 3360stack=[]visit=[] stack.append(start ) visit.append (start ) while stack: node=stack.pop ) nop foriinnodes 3360 ifinotinvisit 3360 ststats