一、深度优先搜索和广度优先搜索
DFS(Depth-First-Search),是盲目搜索算法的一种。常常用在树的遍历及图的处理上。假设当前搜索的节点记为k,深度优先搜索表示,继续探寻k节点的所有的边。搜索过程中,遇到满足条件的k+1节点,则继续搜索探寻k+1节点的所有的边。最后回溯至节点k。这个过程一直进行到已发现从源节点开始可以到达的所有节点位置。
**深度优先遍历图算法步骤:
- 访问起始点k;
- 依次从k的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和k有路径相通的顶点都被访问;
- 若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。
BFS(Breadth-First-Search),BFS同样属于盲目搜索算法,常常使用队列(先进先出)的数据结构来辅助实现。在python中,可以使用堆栈(pop(0))的性质进行实现。BFS是从源节点开始,沿着树(图)的宽度遍历树(图)的节点。将未被访问的节点依次压入队列,再依次读取进行遍历,直到队列为空,所有节点均被访问,算法终止。
**广度优先遍历图算法步骤:
- 首先将源节点放入队列中。
- 从队列中取出第一个节点,检验其是否满足要求。根据条件回传结果,并将它所有尚未检验过的满足条件的子节点加入队列中。
- 若队列为空,表示整张图都检查过了——亦即图中没有未搜寻的目标。结束搜寻并回传结果。 <