//深搜遍历从起点出发能走的所有节点//对于一个节点,只要发现了没走过的点就走到它,如果有多个点可走就任选一个(递归调用)//由于是从起点开始遍历,因此遍历过程也是产生路径的过程 ,因此深搜遍历是有路径信息的 ,单纯的根据数据结构遍历所有点是没有路径信息的 Dfs(V){if(V是旧点)return;
将V标记为旧点;for U in 和V相邻的点 :if(满足能走的条件)// 不仅要考虑这两个点是不是连通的,还要考虑剪枝的条件限制,通过剪枝减少某些不必要路径(减少递归次数) Dfs(U));}//深搜遍历图上所有节点,注意区分仅仅调用Dfs(V) while(能找到新节点K){Dfs(K);}//深搜寻找从起点V到终点的最优路径 Dfs(V){if(找到终点)
判断是否为最优路径
for U in 和V相邻的点 :if(满足能走的条件)// 不仅要考虑这条路能不能走,还要考虑剪枝的条件限制,通过剪枝减少某些不必要路径(减少递归次数) {//走V->U这条路 ,更新路径信息visited(V->U)=1;//标记为已经走过updateParam();//以U为起点继续走 Dfs(U));//重置走V->U这条路的路径信息,接下来尝试走其他和V相邻的点visited(V->U)=0;resetParam();//上条语句走好了U->终点或不能走这条子路径,当我们在递归中加入这条语句后,在执行完这条语句后那条子路径就被删除了 }}
//深搜遍历从起点出发能走的所有节点//对于一个节点,只要发现了没走过的点就走到它,如果有多个点可走就任选一个(递归调用)//由于是从起点开始遍历,因此遍历过程也是产生路径的过程 ,因此深搜遍历是有路径信息的 ,单纯的根据数据结构遍历所有点是没有路径信息的 Dfs(V){ if(V是旧点) return ; 将V标记为旧点; for U in 和V相邻的点 : if(满足能走的条...