BFS:广度优先搜索
DFS:深度优先搜索
树的遍历
BFS:A B C D E F G H I
DFS: A B C E F D G H I
图的遍历
从A出发
BFS:A B C D E F (其中一种)
DFS:A B D F E C (其中一种)
数据结构
BFS: 队列(先进先出)
步骤:1、首先A入队列,
2、A出队列时,A的邻接结点B,C相应进入队列
3、B出队列时,B的邻接结点A,C,D中未进过队列的D进入队列
4、C出队列时,C的邻接结点A,B,D,E中未进过队列的E进入队列
5、D出队列时,D的邻接结点B,C,E,F中未进过队列的F进入队列
6、E出队列,没有结点可再进队列
7、F出队列
DFS:栈(先进后出)
步骤:1、首先A入栈,
2、A出栈时,A的邻接结点B,C相应入栈 (这里假设C在下,B在上)
3、B出栈时,B的邻接结点A,C,D中未进过栈的D入栈
4、D出栈时,D的邻接结点B,C,E,F中未进过栈的E、F入栈(假设E在下,F在上)
5、F出栈时,F没有邻接结点可入栈
6、E出栈,E的邻接结点C,D已入过栈
7、C出栈
代码(Python)
1、图有两种表示方式,邻接矩阵和邻接表
这里用python字典结构表示:
BFS
DFS
非递归能用栈的地方都能用递归
递归DFS递归和非递归的结果不同,非递归:A C E D F B 递归:A B C D E F
此外,深度优先搜索和广度优先搜索的结果都不唯一。
参考视频:https://www.bilibili.com/video/av25763384
网友评论