图的深度优先遍历

图的深度优先遍历


package sort;

import java.util.Stack;

/**
 * Create by ~JH~ on 2018/4/30
 */
public class DFS {
    /**
     * 深度优先遍历 非递归
     * @param relation 邻接矩阵
     * @param visited 是否已经访问
     * @param stack 栈
     */
    public void dfs(int [][] relation, boolean []visited, Stack<Integer> stack){
        while (!stack.isEmpty()){
            int top=stack.pop();
            if (visited[top]==false)
            System.out.print(top+" ");
            visited[top]=true;
            for (int i=0;i<visited.length;i++){
                if (visited[i]!=true&&relation[top][i]==1){
                    stack.push(i);
                }
            }

        }

    }

    /**
     * 图的深度优先遍历 递归
     * @param relation
     * @param visited
     */
    public void dfs_Recursive(int [][] relation, boolean []visited){
        for (int i=0;i<visited.length;i++){
            if (visited[i]==false){
                traverse(i,relation,visited);
            }
        }

    }

    private void traverse(int i,int [][]relation,boolean[]visited) {
        visited[i]=true;
        System.out.print(" "+i);
        for (int j=0;j<visited.length;j++){
            if (visited[j]==false&&relation[i][j]==1)
            traverse(j,relation,visited);
        }
    }

    public static void main(String[] args) {
int [][] re={{0,0,1,0,1},{0,0,1,1,0},{1,1,0,0,0},{0,1,0,0,0},{1,0,0,0,0}};
DFS dfs=new DFS();
boolean[] visited=new boolean[re.length];
        Stack<Integer> stack=new Stack<>();
        for (int i=0;i<re.length;i++){
            if (visited[i]==false){
                stack.push(i);
                dfs.dfs(re,visited,stack);
            }
        }
        System.out.println();
        boolean[] visited1=new boolean[re.length];
        dfs.dfs_Recursive(re,visited1);
    }
}

猜你喜欢

转载自blog.csdn.net/jh_ww/article/details/80148051