【java】深度优先搜索和广度优先搜索

来源:互联网 发布:怎么知道ftp端口是多少 编辑:程序博客网 时间:2024/05/17 22:12


import java.util.LinkedList;import java.util.Queue;public class Q1 {  class Vertex        //顶点类 {  String vertex_name="sb";  boolean new_or_old=true;       //"true" means "new"  Vertex(String vertex_name,boolean new_or_old)  {   this.vertex_name=vertex_name;   this.new_or_old=new_or_old;  } }  public int vertex_count=0; public Vertex v[] = new Vertex[6]; public boolean [][] Adj_Matrix=new boolean [6][6]; int search_count=vertex_count;  public void set_vertex() {  v[0]=new Vertex("v1",true);  v[1]=new Vertex("v2",true);  v[2]=new Vertex("v3",true);  v[3]=new Vertex("v4",true);  v[4]=new Vertex("v5",true);  v[5]=new Vertex("v6",true); } public void setAdj_Matrix() {  Adj_Matrix[0][0]=false;  Adj_Matrix[0][1]=true;  Adj_Matrix[0][2]=false;  Adj_Matrix[0][3]=true;  Adj_Matrix[0][4]=false;  Adj_Matrix[0][5]=true;   Adj_Matrix[1][0]=true;  Adj_Matrix[1][1]=false;  Adj_Matrix[1][2]=true;  Adj_Matrix[1][3]=true;  Adj_Matrix[1][4]=true;  Adj_Matrix[1][5]=false;   Adj_Matrix[2][0]=false;  Adj_Matrix[2][1]=true;  Adj_Matrix[2][2]=false;  Adj_Matrix[2][3]=false;  Adj_Matrix[2][4]=true;  Adj_Matrix[2][5]=false;   Adj_Matrix[3][0]=true;  Adj_Matrix[3][1]=true;  Adj_Matrix[3][2]=false;  Adj_Matrix[3][3]=false;  Adj_Matrix[3][4]=true;  Adj_Matrix[3][5]=true;   Adj_Matrix[4][0]=false;  Adj_Matrix[4][1]=true;  Adj_Matrix[4][2]=true;  Adj_Matrix[4][3]=true;  Adj_Matrix[4][4]=false;  Adj_Matrix[4][5]=false;   Adj_Matrix[5][0]=true;  Adj_Matrix[5][1]=false;  Adj_Matrix[5][2]=false;  Adj_Matrix[5][3]=true;  Adj_Matrix[5][4]=false;  Adj_Matrix[5][5]=false; }  public void renew_vertex()     //将全部顶点状态设置为new {  for(vertex_count=0;vertex_count<6;vertex_count++)  {   v[vertex_count].new_or_old=true;  } }     public void DFSTraverse()     //深度优先搜索 {  renew_vertex();    for(vertex_count=0;vertex_count<6;vertex_count++)  {   if(v[vertex_count].new_or_old==true)   {    search_count=vertex_count;    Search(v[vertex_count]);   }  } }  private void Search(Vertex vertex) {        //深度优先搜索search方法  // TODO 自动生成的方法存根  System.out.println(vertex.vertex_name);    vertex.new_or_old=false;    for(int next_vertex_count=0;next_vertex_count<6;next_vertex_count++)  {      if(v[next_vertex_count].new_or_old==true&&Adj_Matrix[search_count][next_vertex_count]==true)   {    search_count=next_vertex_count;    Search(v[next_vertex_count]);   }  } }  public void BFSTraverse()          //广度优先搜索 {  renew_vertex();    for(vertex_count=0;vertex_count<6;vertex_count++)  {   if(v[vertex_count].new_or_old==true)   {    search_count=vertex_count;    BSearch(v[vertex_count]);   }  } } private void BSearch(Vertex vertex)         //广度优先搜索search方法 {   // TODO 自动生成的方法存根  Queue<Integer> queue = new LinkedList<Integer>();      //创建队列    System.out.println(vertex.vertex_name);   vertex.new_or_old=false;    queue.add(search_count);    while(!queue.isEmpty())  {   search_count=queue.element();   queue.poll();      for(int next_vertex_count=0;next_vertex_count<6;next_vertex_count++)   {        if(v[next_vertex_count].new_or_old==true&&Adj_Matrix[search_count][next_vertex_count]==true)    {     System.out.println(v[next_vertex_count].vertex_name);     v[next_vertex_count].new_or_old=false;     queue.add(next_vertex_count);    }   }  } } public static void main(String[] args) {  // TODO 自动生成的方法存根    Q1 q=new Q1();  q.set_vertex();  q.setAdj_Matrix();    //测试深度优先搜索  System.out.println("深度优先搜索队列为:");  q.DFSTraverse();    //测试广度优先搜索  System.out.println("广度优先搜索队列为:");  q.BFSTraverse();     }}

0 0