- 深度优先搜索(DFS)
- 一般用栈实现,深度优先搜索可以使用栈(Stack)数据结构来实现。通过将待访问的节点压入栈中,并按照后进先出(LIFO)的顺序进行处理,可以保证深度优先的特性。
- 空间O(n),最坏情况下,当图或树是完全连接的时候,深度优先搜索需要保存整个路径上的节点,因此空间复杂度为O(n),其中n是节点的总数。
- 不具有最短性,深度优先搜索并不保证找到最短路径或最优解。它仅仅是通过深度遍历来探索图或树的结构,并且可能会遍历到较远的节点,而没有直接找到目标节点的最短路径。
- 两个重要概念:
- 回溯,当在深度优先搜索过程中无法继续深入时,算法需要回溯到上一层,继续探索其他路径。这个回溯的过程可以看作是撤销之前的决策,以便能够探索其他的可能性。
- 剪枝,为了提高深度优先搜索的效率,可以通过剪枝操作来减少搜索空间。剪枝是在搜索过程中排除一些不可能达到目标的路径,从而缩小搜索范围,节省时间和资源。
一个dfs的简单例子:
以及采用dfs解八皇后问题: