赞
踩
DFS 英文全称为(Depth First Search),中文简称深度优先搜索算法,其过程为沿着每一个可能的路径向下进行搜索,直到不能再深入为止,并且每一个节点只能访问一次。
(1)首先找到初始节点A,
(2)依此从A未被访问的邻接点出发,对图进行深度优先遍历
(3)若有节点未被访问,则回溯到该节点,继续进行深度优先遍历
(4)直到所有与顶点A路径想通的节点都被访问过一次
举个例子,在下方的无向连通图中,假设我们要从起始点A出发,使用深度优先搜索算法进行搜索,首先访问A->B->E,走不通了,回溯到A起始点,走第二个分支节点B,路径为A->C->F->H->G->D,走不通了,再回溯到起始点A,发现所有的节点都已经走过一次了,因此本次搜索结束。
深度优先搜索算法常常被用于解决迷宫问题。
首先我们定义一个5*5的迷宫矩阵 maze
- 0 1 0 0 0
- 0 1 1 1 0
- 0 0 0 0 0
- 0 1 1 1 0
- 0 0 0 1 0
其中0代表迷宫走可以走的路,1代表迷宫中的墙壁
要求从左上角出发,走到左下角结束(0,0)出发,走到(4,4)
我们使用深度优先搜索算法进行求解
(1)从起始点(0,0)出发,第一步只能往下走(1,0),第二步走到交叉路口(2,0)
0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 1 | 0 |
(2)由于出口在右下角,设定优先顺序,下>右>左>上
(3)走到(2,0)处开始往下走,直到走到(4,2)发现走不通
0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 1 | 0 |
(4)此时回溯到上一节点(2,0),开始沿着另一个分支进行深度优先搜索
0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 1 | 0 |
(5)在节点(2,4)中再次遇到分支,优先往下走,最终走到(4,4)走出迷宫
0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | < |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。