深度优先搜索是一个递归的过程。
它从图中某个满足要求的顶点v出发,访问此节点并将访问位更改,然后从v的未被访问的邻接点出发,深度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到。
DFS函数的意义依据情况而定,比如说要在图中搜索是否有某条路径,将返回值设为boolean;另外,DFS时还经常为每个结点盖上一个时间戳,从起始点出发达到某个邻接点所需要的最大步数,则利用一个int []path的数组保存遍历遇到的最大值等等。
深搜更适合在图中进行目标确定的查找。
遍历过程如下:
DFSfunc(){//DFS起始的接口函数
boolean[][] flag=new boolean[][];//访问标记的数组,指明一个顶点是否被访问过。
for(any顶点v in {顶点需要满足的条件}){//对满足条件的顶点进行DFS
if(flag(v) == false) {//对未访问过的顶点调用DFS,若是连通图,只会执行一次
DFS(map,v,flag);//DFS为所要搜索的图,一般为矩阵。
}
}
}
def: DFS(map,v,flag){//DFS递归算法
if(v超出边界条件)//比如矩阵越界或访问位为true等条件
return;
flag(v) =true;//将v的访问位置为已访问
if(满足条件){
do something;//像是树的前序遍历。
}
for(any v1 : 顶点v的邻接点){//递归调用DFS
if(flag(v1) == false){
DFS(map,v1,flag);
}
}