算法简介:不撞南墙不回头----深度优先搜索算法(DFS)
算法简介
DFS算法简介
略
DFS算法思想
- 首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点;当没有未访问过的顶点时,则回到上一个顶点,继续试探访问别的顶点,直到所有的顶点都被访问过.
显然,深度优先遍历是沿着某一条分支遍历直到末端,然后回溯,再沿着另一条进行同样的遍历,直到所有的顶点都被访问过为止. - 理解DFS的关键:DFS在于解决"当下该如何做",至于"下一步如何做"和"当下该如何做"是一样的
- 实现的方法一般是递归调用自己
DFS算法模型
void dfs(int step){
//判断边界
//满足条件则返回
//尝试每一种可能
for(int i=1;i<n;i++){
//继续下一步
dfs(step+1)
}
//返回
}
DFS算法时间复杂度:
1.虽说实现的方式是递归,但是要注意时间复杂度。下图仅供参考:
DFS算法的应用:
- 全排列系列及变种问题
- 迷宫问题(连通图问题)-----复杂度比较高
- 图中独立子图个数(种子填充法)
- 图遍历