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();
}
}
【java】深度优先搜索和广度优先搜索
最新推荐文章于 2024-04-23 21:15:25 发布