数据结构和算法(29)之图

学习数据结构和算法的日常Demo

图的基本介绍

在这里插入图片描述
在这里插入图片描述

图的常用概念

在这里插入图片描述
在这里插入图片描述

图的表示方法

在这里插入图片描述
在这里插入图片描述

代码实现如下图结构(邻接矩阵法)

在这里插入图片描述

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

在这里插入图片描述

GitHub:数据结构和算法源代码

发布了83 篇原创文章 · 获赞 23 · 访问量 3537

猜你喜欢

转载自blog.csdn.net/qq_44779506/article/details/105205831