Depth-First Search和Breadth-First Search,即深度优先和广度优先是图的两种搜索的方法。其实与其说是方法,不如说是两种思想。下面我们就来介绍这两种思想。
Depth-First Search
深度优先是指在图的查找中,对每一个分支深入到不能再深入为止,如果到达了终点,则选择另一个未访问的顶点,继续查找,知道每个节点都被访问到,并且每个节点只能被访问一次。
基本算法:
a) 访问顶点V
b) 依次从V的未访问的节点出发,遍历所有与V在相通路径上的节点。
c) 选取还未被访问的结点,重复上面的过程。
下图就是深度优先的一个遍历过程。
Breadth-First Search
广度优先是分层次的展开检查图中的所有结点,知道找到最终的结果。也就是说首先搜索与s距离为k的所有结点,然后在搜索与s距离k+1的所有结点。算法通过已找到的节点和未找到的节点的边界向外扩展。Dijkstra算法以及prim算法都是应用的这一思想。
下图就是广度优先的一个遍历过程。
下面是代码的python实现
1 | #coding=utf-8 |