图数据文件:
tinyDG.txt
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
public class GraphDFS {
int arc[][]; //存放图中边的数组
int v,e; //图的定点数和边数
int[] visited;
int flag=0;
public GraphDFS(int v, int e){
this.v = v;
this.e = e;
arc = new int[v][v];
for(int i=0; i<v; i++)
for(int j=0; j<v; j++){
arc[i][j] = 0;
}
visited = new int[v];
for(int i=0; i<v; i++){
visited[i] = 0;
}
}
public void edges(int v1,int v2){ //图中边的信息
arc[v1][v2] = 1;
arc[v2][v1] = 1;
}
public int[][] getEdges(){ //获取邻接矩阵
return arc;
}
public void DFSTraverse(int v1){ //深度遍历
flag++;
if(flag==v){
System.out.print(v1);
}else {
System.out.print(v1+ "-");
}
visited[v1] = 1;
for(int i=0; i<v; i++){
if(arc[v1][i]==1 && visited[i]==0){
DFSTraverse(i);
}
}
}
public void dfs(GraphDFS g){
for(int i=0; i<v; i++){
if(visited[i]==0){
DFSTraverse(i);
}
}
}
public static void main(String[] args) throws Exception {
int i,j;
Scanner scanner = new Scanner(new File("tinyG.txt"));
int v = scanner.nextInt(); //顶点数
int e = scanner.nextInt(); //边数
GraphDFS g = new GraphDFS(v, e);
for(i=0; i<e; i++){
int v1 = scanner.nextInt();
int v2 = scanner.nextInt();
g.edges(v1, v2);
}
g.DFSTraverse(0);
g.dfs(g);
}
}
结果: