package 算法;

public class GraphDfs2 {
    private int vertices;
    ///先是邻接矩阵法
    private int[][] adjArry;
    public GraphDfs2 (int vertices){
        this.vertices=vertices;
       // this.adjArry=adjArry[vertices+1][vertices+1];
        this.adjArry=new int[vertices+1][vertices+1];
    }
    //二维数组建好之后,建立联系
    public void addEdge(int i,int j){
        adjArry[i][j]=1;
        adjArry[j][i]=1;
    }
    //遍历
    public void dfs(int start){
        System.out.println("遍历结果是:");
        boolean[] visit=new boolean[vertices+1];
        dfsUtil(start,visit);
    }
    public void dfsUtil(int i,boolean[] visit){
        visit[i]=true;
        System.out.print(i+" ");
        //我一开始把打印输出加到for循环里面了,导致少一个数
        for(int j=1;j<=vertices;j++){
            if(adjArry[i][j]==1&&!visit[j]){
                //System.out.print(i+" ");
                dfsUtil(j,visit);
                //dfsUtil(j,visit[j]);
                //不需要再加个【】
            }
        }
    }
    public void printGraph(){
        for(int i=1;i<=vertices;i++){
            for(int j=1;j<=vertices;j++){
                System.out.print(adjArry[i][j]+" ");
            }
            System.out.println();
        }

    }

    public static void main(String[] args) {
        //建立一个对象
        GraphDfs2 graph=new GraphDfs2(6);
        graph.addEdge(1,2);
        graph.addEdge(1,5);
        graph.addEdge(2,3);
        graph.addEdge(2,4);
        graph.addEdge(3,6);
        graph.addEdge(4,5);
        graph.addEdge(4,6);
        graph.printGraph();
        graph.dfs(1);
    }

}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐