DFS(Deep First Search)深度优先搜索
邻接矩阵实现
import java.util.*;
class MGraph{
public char[] vertex;
public int[][] arc;
public int vertexNum,arcNum;
public int[] visited;
public MGraph(char[] a,int n,int e){
this.vertexNum=n;
this.arcNum=e;
vertex=new char[n];
visited=new int[n];
Arrays.fill(visited,0);
for(int i=0;i<vertexNum;i++)
vertex[i]=a[i];
arc=new int[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
arc[i][j]=0;
}
}
public void addNum(int i,int j){
arc[i][j]=1;
arc[j][i]=1;
}
public void Print(){
for(int i=0;i<vertexNum;i++)
{
for(int j=0;j<vertexNum;j++)
{
System.out.print(arc[i][j]);
}
System.out.println();
}
}
public void DFSTraverse(int v)
{
System.out.println(vertex[v]);
visited[v]=1;
for(int j=0;j<vertexNum;j++)
if(arc[v][j]==1 && visited[j]==0)
DFSTraverse(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();
int n=str.length();
char[] a=str.toCharArray();
MGraph graph=new MGraph(a,n,e);
for(int i=0;i<e;i++)
{
int p,q;
p=in.nextInt();
q=in.nextInt();
graph.addNum(p,q);
}
graph.Print();
graph.DFSTraverse(2);
}
}
邻接表实现
import java.util.*;
class ArcNode{ //定义边表节点
int adjvex;
ArcNode next;
}
class VertexNode{ //定义顶点表节点
char vertex;
ArcNode firstedge;
}
class ALGraph{
VertexNode [] adjlist;
int[] visited;
int vertexNum; //定义顶点数目
int arcNum; //定义边的数目
public ALGraph(char[] a,int n,int e){
this.vertexNum=n;
this.arcNum=e;
adjlist = new VertexNode[n];
visited = new int[n];
Arrays.fill(visited,0);
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; //将节点s插入到第i个边表的表头
adjlist[i].firstedge=s;
ArcNode p=new ArcNode();
p.adjvex=i;
p.next=adjlist[j].firstedge; //将节点p插入到第j个边表的表头
adjlist[j].firstedge=p;
}
public void DFSTraverse(int v){
System.out.print(adjlist[v].vertex);
visited[v]=1;
ArcNode p = adjlist[v].firstedge;
while(p!=null)
{
int j=p.adjvex;
if(visited[j]==0) DFSTraverse(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<e;i++)
{
int p,q;
p=in.nextInt();
q=in.nextInt();
graph.addNum(p,q);
}
graph.DFSTraverse(1);
}
}