图搜索

public class MyGraph {
    public static void main(String[] args){
        boolean[] bo = new boolean[7];
        char[] node = {'A','B','C','D','E','F','G'};
        int[][] arrary = {{0,1,0,0,0,0,0},
                          {0,0,1,0,1,1,0},
                          {0,0,0,0,1,0,0},
                          {0,0,1,0,0,0,0},
                          {0,0,0,1,0,0,0},
                          {0,0,0,0,0,0,1},
                          {0,0,0,0,0,0,0}
                         };
        MGraph mg = new MGraph(node,arrary);
        mg.initbo();
        mg.DFS(0);
    }
}


import java.util.LinkedList;
import java.util.Queue;

public class MGraph {
    char[] node;
    int[][] arrary;
    boolean[] bo = new boolean[7];
    Queue qu = new LinkedList();

    public MGraph(char[] node,int[][] arrary){
        if(arrary.length!=node.length){
            System.out.print("error");
        }
        if(arrary.length!=arrary[0].length){
            System.out.print("error");
        }
        this.node=node;
        this.arrary=arrary;
    }

    public void initbo(){
        for (int j = 0;j<node.length;j++){
            bo[j] = false;
        }
    }


    public void BFS(int i){
        bo[i] = true;
        System.out.print(node[i]);
        for(int j=0;j<node.length;j++){
            if(arrary[i][j] == 1 && !qu.contains(j)){
                qu.offer(j);
            }
        }
        if(!qu.isEmpty()) {
            int p = (int) qu.poll();
            if(!bo[p]) {
                BFS(p);
            }
        }
}

//    public void DFS1(int i) {
//        bo[i] = true;
//        System.out.print(node[i]);
//        int j;
//        for(j=0;j<node.length;j++){
//            if(arrary[i][j] == 1){
//                qu.offer(j);
//            }
//        }
//        int t = (int)qu.poll();
//        DFS(t);
//        if(bo[t]==false){
//            DFS(t);
//        }
//
//    }


    public void DFS(int  i) {
        //首先访问该结点,在控制台打印出来
        System.out.print(node[i] + "  ");
        //置该结点为已访问
        bo[i] = true;
        for (int j = 0; j < node.length; j++) {
            if (arrary[i][j] == 1 && bo[j] ==false) {
                DFS(j);
            }

        }

    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值