Diagrama da estrutura e algoritmo dos dados (29)

Demonstração diária das estruturas e algoritmos de dados de aprendizagem

Introdução básica

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Conceitos comuns de gráficos

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Método de representação do diagrama

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

O código implementa a seguinte estrutura (método da matriz de adjacência)

Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui

GitHub: estrutura de dados e código fonte do algoritmo

Publicado 83 artigos originais · Gosto 23 · Visite 3537

Acho que você gosta

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