深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。这样的访问策略是优先往纵向进行深入挖掘,而不是对一个顶点的所有邻接顶点进行横线访问。简单来说就是一条路走到死,不行再掉头。
思路:从当前顶点选一个与之连接而未访问过的顶点,将当前节点往该邻接顶点移动,如果邻接顶点没有未访问的,则回溯到上一个顶点位置,继续该步骤。直到所有顶点都访问过。
往邻接但未访问过的顶点移动
邻接顶点没有未访问的,进行回溯,直到遇到未访问的邻接顶点
当所有顶点都被访问过时,退出算法
下面是深度优先搜索的过程动画
代码演示
public void dsf(){ visited = new boolean[vertexes.size()]; //以在集合中下标为0的顶点,进行深度搜索 dsf(visited, 0); } /** * 深度优先搜索 * @param visited * @param row */ public void dsf(boolean[] visited, int row){ //输出当前顶点 System.out.print(vertexes.get(row) + " -> "); //将当前顶点设为已访问 visited[row] = true; //获取当前顶点的邻接顶点下标 int index = getFirstNeighbor(row); //如果当前顶点有邻接顶点则进行深度搜索 while (index != -1){ //当邻接顶点未访问时,则递归遍历 if (visited[index] != true){ dsf(visited, index); } //当邻接顶点已访问时,则寻找另一个邻接顶点 index = getNeighbor(row, index); } }