图的创建
- 定义需要使用到的变量:
List<String>
存放顶点、int[][] 存放边、记录边数 edgeNums- 插入顶点
- 插入边
- 返回对应下边的顶点值
- 获取边数
- 获取边的权值
public class Graph {
// 存放顶点
private List<String> vertexList ;
// 存放边
private int[][] edges ;
// 边的数目
private int edgesNums ;
public static void main(String[] args) {
String[] vertexs = {"A", "B", "C", "D", "E"};
Graph g = new Graph(vertexs.length);
// 插入顶点
for (int i = 0; i < vertexs.length ; i++){
g.insertVertex(vertexs[i]);
}
// 插入边
// A-B A-C B-C B-D B-E
g.insertEdge(0,1,1); // A-B
g.insertEdge(0,2,1);
g.insertEdge(1,2,1);
g.insertEdge(1,3,1);
g.insertEdge(1,4,1); // B-E
g.showGraph();
}
// 构造器初始化
public Graph(int n){
vertexList = new ArrayList<>(n);
edges = new int[n][n];
edgesNums = 0;
}
/**
* 插入顶点
* @param vertex
*/
public void insertVertex(String vertex){
vertexList.add(vertex);
}
/**
* 插入边
* @param i 顶点1
* @param j 顶点2
* @param weight 权重
*/
public void insertEdge(int i, int j, int weight){
edges[i][j] = weight;
edges[j][i] = weight;
edgesNums++;
}
/**
* 遍历图
*/
public void showGraph(){
for (int[] edge : edges){
System.out.println(Arrays.toString(edge));
}
}
/**
* 获取边的数目
*/
public int getEdgeNums(){
return edgesNums;
}
// 获取顶点数目
public int getVertexNums(){
return vertexList.size();
}
/**
* 获取对应下标的顶点
* @param i
* @return
*/
public String getValueByIndex(int i){
return vertexList.get(i);
}
/**
* 根据 v1 v2 返回边的权值
* @param v1
* @param v2
* @return
*/
public int getWeightByEdges(int v1, int v2){
return edges[v1][v2];
}
}