什么是深度优先搜索?
深度优先搜索,递归,栈。一条路走到头,并且没到达目标, 就往回退一个,走其他的路 ,直到走到目标节点 。 但是这时候就有很多种可能,所以复杂度很高,这时候就用到剪枝了。
深搜关键在于剪枝,常见的有两种剪枝方式:可行性剪枝、最优性剪枝 :
1. 可行性剪枝:
及早发现正在探索的路径已经走不到终点 ,不在往下走。
2. 最优性剪枝:
走到节点V时发现此时付出的代价,比当前最有代价要大,就不在往下继续搜索。
3. 处处最优剪枝:
记录从起点到每个节点当前的最优路径代价,比较再次走到节点v的代价,空间换时间,需要顶一个数组,记录从起点到每个节点的当前最优路径代价 。
常用的三种形式:
1.找终点,一直搜索直到找到终点。一般会有起始节点,从起始节点开始找,把走过的点标记。
2.求路径,最好用广搜,用个结构体保存路径。
3.找遍历连通图,从第一个没被标记的点开始找,直到所有的可以走的点都被标记过。