一.图的存储方式
1.邻接矩阵
用一个二维数组来存储图,每个点若值为一则代表两点间有联系,无向图是关于四十五度对称的,而有向图不对称表示连接关系
2.邻接表
用数组加链表的方式存储,每条链表上的每个节点表示第i个图节点的所连接的图节点
这里我们采用邻接矩阵来实现图
class Test {
public static void main(String[] args){
int n = 5;
Graph graph = new Graph(5);
String[] vertexValue = {"A", "B", "C", "D", "E"};
// 建立各顶点所对应的值
for (String vertex : vertexValue) {
graph.insertVertex(vertex);
}
// 构造边的关系
graph.insertEdges(0, 1, 1);
graph.insertEdges(0, 2, 1);
graph.insertEdges(1, 2, 1);
graph.insertEdges(1, 3, 1);
graph.insertEdges(1, 4, 1);
graph.showGraph();
}
}
class Graph{
private ArrayList<String> vertexList;//存储顶点
private int[][] edges;//存储图
private int numberOfEdge;//存储边的数目
//构造器初始化图
Graph(int n){
vertexList = new ArrayList<>(n);
edges = new int[n][n];
numberOfEdge = 0;
}
//添加顶点
public void insertVertex(String vertex) {
vertexList.add(vertex);
}
// 返回结点数
public int getNumOfVertex() {
return vertexList.size();
}
// 返回边数
public int getNumOfEdges() {
return numberOfEdge;
}
//构造边,weight为权值,可以更改
public void insertEdges(int v1, int v2, int weight) {
edges[v1][v2] = weight;
edges[v2][v1] = weight;
numberOfEdge++;
}
// 返回v1和v2的权值
public int getWeight(int v1, int v2) {
return edges[v1][v2];
}
//打印邻接矩阵
public void showGraph() {
for (int[] link : edges) {
System.out.println(Arrays.toString(link));
}
}
}