Demonstração diária das estruturas e algoritmos de dados de aprendizagem
Introdução básica
Conceitos comuns de gráficos
Método de representação do diagrama
O código implementa a seguinte estrutura (método da matriz de adjacência)
import java.util.ArrayList;
import java.util.LinkedList;
public class Graph {
private ArrayList<String> vertexs; // 存储图顶点集合
private int vertexSize; // 顶点个数
private int[][] edges; // 存储图的连接矩阵
private int numOfEdges; // 边的个数
// 定义数组,记录某个顶点是否被访问过
private boolean[] isVisited;
public Graph(int n) {
// 初始化矩阵和vertex
this.vertexSize = n;
edges = new int[vertexSize][vertexSize];
vertexs = new ArrayList<>();
}
// 插入顶点
public void insert(String vertex) {
vertexs.add(vertex);
}
// 添加边
// v1和v2表示第几个顶点
// weight为1表示点与点连接
public void insertEdge(int v1, int v2, int weight) {
// 无向图
edges[v1][v2] = weight;
edges[v2][v1] = weight;
numOfEdges++; // 边长加一个
}
// 返回节点的个数
public int getNumOfVertex() {
return vertexs.size();
}
// 返回边的数目
public int getNumOfEdges() {
return this.numOfEdges;
}
// 返回节点i对应的数据
public String getData(int i) {
return vertexs.get(i);
}
// 返回点和点直接是否连接的标志(1)
public int getWeight(int v1, int v2) {
return edges[v1][v2];
}
// 显示图的矩阵
public void print() {
for (int[] edge : edges) {
for (int i : edge) {
System.out.print(i + " ");
}
System.out.println();
}
}
public static void main(String args[]) {
// 创建顶点
String vertex = "ABCDEFGH";
Graph graph = new Graph(vertex.length());
for (int i = 0; i < vertex.length(); i++) {
graph.insert(String.valueOf(vertex.charAt(i)));
}
// 创建边
// A-B
graph.insertEdge(0, 1, 1);
// A-C
graph.insertEdge(0, 2, 1);
// B-D
graph.insertEdge(1, 3, 1);
// B-E
graph.insertEdge(1, 4, 1);
// D-H
graph.insertEdge(3, 7, 1);
// E-H
graph.insertEdge(4, 7, 1);
// C-F
graph.insertEdge(2, 5, 1);
// C-G
graph.insertEdge(2, 6, 1);
// F-G
graph.insertEdge(5, 6, 1);
// 遍历图矩阵
graph.print();
System.out.println("顶点数:" + graph.vertexSize);
System.out.println("边数:" + graph.numOfEdges);
}
}