关于 dfs深度优先搜索
·dfs是什么
dfs是一个针对图和树的遍历算法
·dfs的原理
dfs是由栈的形式实现的,通过栈进行路径储存
·dfs的注意事项
1 剪枝 剪枝是为了减少时间成本
2 回溯 回溯回到原来路径
3 还原 回到原来路径时,要还原现场
·dfs的思想
假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中 所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
·dfs的特点
选定一个出发点后进行遍历,能前进则前进,若不能前进,回退一步再前进,或再回退一步后继续前进。依此重复,直到所有与选定点相通的所有顶点都被遍历。
·显然,dfs是一个递归的过程
//遍历图上所有节点 Dfs(V) { if(V是旧节点) return; else { 将V标记为旧点; 对和V相邻的每个节点U { Dfs(U); } } } int main() { 将所有点标记为新点; while(在图中能找到新点k) Dfs(k); } //在图上寻找路径 bool Dfs(V) { if(V为终点) return true; if(V为旧点) return false; 将V标记为旧点; 对和V相邻的每个节点U { if(Dfs(U)==true) return true; } return false; }