BFS和DFS

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

你可能感兴趣的:(BFS和DFS)