(十四)图的深度优先遍历DFS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/91377077

 

DFS(Depth First Search)深度优先搜索是从起始顶点开始,递归访问其所有邻近节点,比如A节点是其第一个邻近节点,而B节点又是A的一个邻近节点,则DFS访问A节点后再访问B节点,如果B节点有未访问的邻近节点的话将继续访问其邻近节点,否则继续访问A的未访问邻近节点,当所有从A节点出去的路径都访问完之后,继续递归访问除A以外未被访问的邻近节点。因为是递归过程,所以我们用过程图看一下也许会更直观一些。

// 顶点数
    private int number = 6;
    // 记录顶点是否被访问
    private boolean[] flag;
    // 顶点
    private String[] vertexs = { "u", "v", "w", "x", "y", "z" };
    // 边
  
    
    private int[][] edges = { 
    	//	 {u, v, w, x, y, z}
            { 0, 1, 0, 1, 0, 0 }, 
            { 0, 0, 0, 0, 1,0}, 
            { 0, 0, 0, 0, 1,1 },
            { 0, 1, 0, 0, 0,0 },
            { 0, 0, 0, 1, 0,0 }, 
            { 1, 0, 0, 0, 0,1},
           
            };

    // 图的深度遍历操作(递归)
    void DFSTraverse() {
        flag = new boolean[number];
        for (int i = 0; i < number; i++) {
            if (flag[i] == false) {// 当前顶点没有被访问
                DFS(i);
            }
        }
    }

    // 图的深度优先递归算法
    void DFS(int i) {
        flag[i] = true;// 第i个顶点被访问
        System.out.print(vertexs[i] + " ");
        for (int j = 0; j < number; j++) //要访问这个节点下所有边
{          //没访问过,并且有边
            if (flag[j] == false && edges[i][j] == 1) 
{
                DFS(j);//体现深度优先
            }
        }
    }

  
    

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/91377077