深度优先探索
DFS:
时间复杂度:一位数组:O(n)二维数组+标记:O(n^2),有时候还可能使O(2^n),总而言之DFS的时间复杂度比较高。(个人认为)
深度优先搜索算法(DFS)原理:
深度优先搜索(Depth First Search, DFS)是一种用于遍历或搜索树或图的算法。该方法从根节点(选择任意一个顶点作为起始节点,在无向图中适用)开始,尽可能深地沿着每条分支进行探索直到不能再前进为止;之后回退并重复这一过程直至所有节点都被访问过。(简单来说就是尝试每种可能直至成功,或所以可能都尝试过)。
在具体执行过程中,当遇到未被访问过的邻接点时就立即转向下一个新路径继续探查而不是返回上一层级再做其他尝试。这种特性使得DFS非常适合用来解决连通分量检测、迷宫求解等问题
深度优先搜索算法(DFS)的详细执行步骤(一般是用递归实现)
1. 初始化
创建一个栈用于存储待访问的节点,并标记已访问过的节点以防重复访问。通常会使用布尔数组来记录哪些节点已经被访问。
2. 访问初始节点
选择一个起点作为当前正在处理的第一个顶点,将其压入栈并设置为已访问状态1。
3. 进行深度探索
从栈顶取出一个未被完全扩展的节点u,对于每一个与之相邻且未曾访问过的邻居v:
- 将该邻接点设为已访问;
- 把它加入到栈中以便后续进一步考察其连接情况;
如果遇到死胡同即无法继续前进,则返回上一步操作前的状态——弹出堆栈顶端元素直至找到可以拓展的新路径位置或全部完成遍历过程。
4. 结束条件
当所有可达区域均已被探测完毕之后停止循环结构。
DFS 的优缺点
-
优点:
-
实现简单(递归或栈)。
-
空间复杂度较低(与树/图的高度相关)。
-
-
缺点:
-
可能陷入无限循环(需标记已访问节点)。
-
不保证找到最优解(如最短路径需改用 BFS)。
-
今天没学什么所以水一下(虽然天天水)。