BFS(Breath First Search)深度优先搜索
邻接矩阵
import java.util.*;
class MGraph{
char[] vertex;
int[][] arc;
int vertexNum,arcNum;
int[] visited;
int[] Q;
public MGraph(char[] a,int n,int e){
vertexNum = n;
arcNum = e;
visited = new int[n];
Arrays.fill(visited,0);
vertex=new char[n];
arc = new int[n][n];
Q = new int[n];
for(int i=0;i<n;i++){
vertex[i] = a[i];
}
}
public void addNum(int i,int j){
arc[i][j]=1;
arc[j][i]=1;
}
public void BFSTraverse(int v){
int front=-1;
int rear=-1;
System.out.print(vertex[v]);
visited[v]=1;
Q[++front]=v;
while(front != rear)
{
v = Q[++front];
for(int j=0;j<vertexNum;j++)
if(arc[v][j]==1 && visited[j]==0)
{
System.out.print(vertex[j]);
visited[j]=1;
Q[++rear]=j;
}
}
}
}
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.print("Input the number of edge:");
int e=in.nextInt();
System.out.print("Input the vertex:");
String str=in.next();
char[] a=str.toCharArray();
int n=str.length();
MGraph graph = new MGraph(a,n,e);
for(int i=0;i<e;i++)
{
int p=in.nextInt();
int q=in.nextInt();
graph.addNum(p,q);
}
graph.BFSTraverse(0);
}
}
邻接表
import java.util.*;
class ArcNode {
int adjvex;
ArcNode next;
}
class VertexNode{
char vertex;
ArcNode firstedge;
}
class ALGraph{
int vertexNum;
int arcNum;
VertexNode[] adjlist;
int[] visited;
int[] Q;
public ALGraph(char[] a,int n,int e){
vertexNum=n;
arcNum=e;
adjlist = new VertexNode[n];
visited = new int[n];
Arrays.fill(visited,0);
Q = new int[n];
for(int i=0;i<vertexNum;i++)
{
adjlist[i] = new VertexNode();
adjlist[i].vertex=a[i];
adjlist[i].firstedge=null;
}
}
public void addNum(int i,int j){
ArcNode s=new ArcNode();
s.adjvex=j;
s.next=adjlist[i].firstedge;
adjlist[i].firstedge=s;
ArcNode p=new ArcNode();
p.adjvex=i;
p.next=adjlist[j].firstedge;
adjlist[j].firstedge=s;
}
public void BFSTraverse(int v){
int front=-1;
int rear=-1;
System.out.print(adjlist[v].vertex);
visited[v]=1;
Q[++rear]=v;
while(front!=rear)
{
v=Q[++front];
ArcNode p=adjlist[v].firstedge;
while(p!=null)
{
int j=p.adjvex;
if(visited[j]==0){
System.out.print(adjlist[j].vertex);
visited[j]=1;
Q[++rear]=j;
}
p=p.next;
}
}
}
}
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.print("Input the number of edge:");
int e=in.nextInt();
System.out.print("Input the vertex:");
String str=in.next();
int n=str.length();
char[] a=str.toCharArray();
ALGraph graph=new ALGraph(a,n,e);
for(int i=0;i<n;i++)
{
int p=in.nextInt();
int q=in.nextInt();
graph.addNum(p,q);
}
graph.BFSTraverse(0);
}
}