以下仅以一个遍历一个图为例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
public class Tu {//这里以无向图为例
private ArrayList<String> fromHang;//顶点名
private int[][][] Dian;//三维数组 用于储存点的信息
private boolean[] Fangwen;
public static void main(String[] args) {
//图的大小
int a=5;
//实例化并定义长度
Tu tu=new Tu(a);
tu.jiaMing("A");
tu.jiaMing("B");
tu.jiaMing("C");
tu.jiaMing("D");
tu.jiaMing("E");
//添加边(也可以叫路径)
tu.JIaDian(0, 1, 0, 1);//a-b
tu.JIaDian(0, 4, 0, 1);//a-e
tu.JIaDian(0, 2, 0, 1);//a-c
tu.JIaDian(2, 3, 0, 1);//c-d
tu.showBiao(a);
// tu.BFS(0, 3);
tu.DFS(0);
}
//-------------------------------------------------------------------
//实例化 ( 顶点数量 , 一个点的信息量 )
public Tu(int x ) {
Dian=new int[x][x][2]; //信息分别时 0通路的权重 1是否有被访问(1是访问过0相反)
fromHang=new ArrayList<String>();
Fangwen=new boolean[x];
}
//添加或更改点的信息
public void JIaDian(int from ,int to ,int x0 , int x1 ) {
Dian[from][to][x0]=x1;
Dian[to][from][x0]=x1;
}
//添加点的名字
public void jiaMing(String a) {
fromHang.add(a);
}
//显示矩阵
public void showBiao(int a) {
for (int i=0; i<a ;i++ ) {
for (int j = 0; j < a; j++) {
System.out.print(Dian[i][j][0]+" ");
}
System.out.println("");
}
}
//索引节点名
public String ShowMing(int a) {
return fromHang.get(a);
}
//--------------------------------------------------------------=
//DFS 深度优先搜索
public void DFS(int from) {
System.out.println(fromHang.get(from)+"->");
//变更是否被读取状态
Fangwen[from]=true;
for (int i = 0; i < fromHang.size(); i++) {
//确认这个点是否有被访问过且与点i联通
if (Dian[from][i][0]==1&&!Fangwen[i]) {
//利用递归进入点i
DFS(i);
}
}
}
}