Diagrama de estructura de datos y algoritmo (29)

Demostración diaria de estructuras de datos de aprendizaje y algoritmos.

Introducción básica

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Conceptos comunes de grafos

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Método de representación de diagrama

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

El código implementa la siguiente estructura (método de matriz de adyacencia)

Inserte la descripción de la imagen aquí

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);
    }
}

Inserte la descripción de la imagen aquí

GitHub: estructura de datos y código fuente del algoritmo

83 artículos originales publicados · Me gusta 23 · Visita 3537

Supongo que te gusta

Origin blog.csdn.net/qq_44779506/article/details/105205831
Recomendado
Clasificación