图的遍历之广度优先搜索和深度优先搜索

来源:互联网 发布:餐饮管理系统数据库 编辑:程序博客网 时间:2024/06/05 17:50

        图的遍历有两种常见的方式,一种是广度优先搜索,另一种是深度优先搜索。广度搜索的思想是把与之相邻的节点全部输出,并把这些节点进入队列,然后依次出队列,继续访问相邻的节点并入队列。深度搜索的思想是沿着孩子的节点继续访问子孩子,在访问的过程中依次入栈,当访问完所有的孩子后,从栈中出来并继续重复访问所有孩子。

          //深度优先遍历

public void DFS(){

   for(int i=0;i<number;i++){

   if(flag[i]==false)

       DFS_Trasver(i);

   }

}

       public void DFS_Trasver(int i){

flag[i]=true;

System.out.print(vertexs[i]+"  ");

        for(int j=0;j<number;j++){

   if(flag[j]==false && edges[i][j]==1)

DFS_Trasver(j);

}

   }

        //广度优先遍历

public void BFS(){

//类似于队列来操作

List<Integer> list=new ArrayList<Integer>();

flag[0]=true;

System.out.print(vertexs[0]+"  ");

list.add(0);

while(list.size()>0){

   int i=list.get(0);

list.remove(0);

for(int j=0;j<number;j++){

   if(edges[i][j]==1 && flag[j]==false){

   System.out.print(vertexs[j]+"  ");

flag[j]=true;

list.add(j);

}

}

}

}

原创粉丝点击