图的介绍及简单使用


图是由顶点的有穷非空集合和顶点之间边的的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合.

图的特征

  • 线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元 素,我们则称之为顶点(Vertex)。
  • 线性表中可以没有数据元素,称为空表。树中可以没有结点,叫做空树。
  • 线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结 点具有层次关系,而图中,任意两个顶点之间都可能有关系,顶点之间的 逻辑关系用边来表示,边集可以是空的。

无向图
image.png

有向图
image.png

图的权
image.png

连通图

image.png


image.png

图的存储结构
image.png

邻接矩阵
image.png

image.png

image.png

带权邻接矩阵
image.png

邻接表
image.png

image.png

image.png
十字链表
十字链表
深度优先遍历
深度优先遍历
广度优先遍历
在这里插入图片描述
以带权邻接矩阵为例

public class Graph {
    //顶点的数量
    private int vertexSize;
    //一维数组
    private int[] vertexs;
    //二维数组
    private int[][] matrix;
    private int MAX_WEIGHT = 1000;


    public Graph() {
        this.vertexSize = 5;
        matrix = new int[vertexSize][vertexSize];
        vertexs = new int[5];
        for (int i = 0; i < vertexSize; i++) {
            vertexs[i] = i;
        }
    }

    /**
     * 获取两个顶点之间的权值
     */
    public int getWeight(int v1, int v2) {
        int weight = matrix[v1][v2];
        return weight==0?0:(weight==MAX_WEIGHT?-1:weight);
    }

    /**
     * 获得出度
     */
    public int getOutDegree(int index) {
        int degree = 0;
        for (int i = 0; i < matrix[index].length; i++) {
            int weight = matrix[index][i];
            if (weight != 0 && weight != MAX_WEIGHT) {
                degree++;
            }
        }
        return degree;
    }

    public int[] getVertexs() {
        return vertexs;
    }

    public void setVertexs(int[] vertexs) {
        this.vertexs = vertexs;
    }

    @Test
    public void test() {

        Graph grace = new Graph();
        int[] a1 = new int[]{0, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 6};
        int[] a2 = new int[]{9, 0, 3, MAX_WEIGHT, MAX_WEIGHT};
        int[] a3 = new int[]{2, MAX_WEIGHT, 0, 5, MAX_WEIGHT};
        int[] a4 = new int[]{MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 0, 1};
        int[] a5 = new int[]{MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, MAX_WEIGHT, 0};
        grace.matrix[0] = a1;
        grace.matrix[1] = a2;
        grace.matrix[2] = a3;
        grace.matrix[3] = a4;
        grace.matrix[4] = a5;
        int outDegree = grace.getOutDegree(1);
//        System.out.println(outDegree);
        System.out.println("权值"+grace.getWeight(0,4));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值