• 数据结构之图


    1. 图的定义

    图(graph) 是由一些点(vertex) 和这些点之间的连线(edge) 所组成的;其中,点通常称为顶点(vertex),而点到点之间的连线通常称之为或者弧(edge)。通常记为G=(V,E);

    要注意的是:线性表可以是空表,树可以是空树,图不可以是空图,图可以没有边,但是至少要有一个顶点。

    2. 图的组成

    图由两种类型的元素组成,顶点,有时候,有向图的边也称为
    在这里插入图片描述

    • 顶点代表对象,边则建立起对象之间的关系关联
    • 入度就是进入该顶点边的数目,出度就是离开这个顶点边的数目,有向图的就是入度加出度。
    • 是顶点之间的逻辑关系表示,边集可以是空的

    3. 图的分类

    • 有向图无向图在这里插入图片描述

      • 有向图中,边是由两个顶点组成的有序对,具有特定的方向。形象地说,有向图可以由顶点和带方向的箭头所组成的圈绘制出来。
      • 无向图中,边是没有方向的,因此,无向图的边就直接用线段来代替箭头表示
    • 完全图
      在这里插入图片描述

      • 完全图如果任意两个顶点之间都存在边叫完全图,而有向的边叫有向完全图
      • 当一个图接近完全图时,则称它为稠密图(Dense Graph),而当一个图含有较少的边时,则称它为稀疏图
    • 连通图
      在这里插入图片描述

      • 无向图中,两顶点有路径存在,就称为连通的。若图中任意两顶点都连通,同此图为连通图
    • 无权图带权图
      在这里插入图片描述

      • 对图中的赋予具有一定意义的数值(路程、费用等等)的图称为带权图

    4. 图的存储结构

    在这里插入图片描述

    • 邻接矩阵
      在这里插入图片描述
      • 邻接矩阵用两个数组保存数据。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边的信息

      • 顶点v1 和顶点v3 之间存在一条边, 则称顶点v1 和3 互为邻接点

      • 有向图邻接矩阵
        在这里插入图片描述

      • 无向图邻接矩阵
        在这里插入图片描述

      • 0 表示这两个顶点之间没有边,1 表示有边

      • 对应行非0元素的个数是出度;对应列非0元素的个数是入度

      • 优点: 可以快速判断两个顶点之间是否存在边,可以快速添加边或者删除边。

      • 缺点: 由于存在n个顶点的图需要n*n个数组元素进行存储,当图为稀疏图时,使用邻接矩阵存储方法将会出现大量0元素,这会造成极大的空间浪费。

      • 实现代码

    5. 深度优先搜索

    在这里插入图片描述

    • 深度优先搜索在搜索过程中每当访问到某一个顶点后,需要递归地访问此顶点的所有未访问过的相邻顶点。因而,这种搜索将尽可能深地持续探索,直到无法继续为止。

    6. 广度优先搜索

    在这里插入图片描述

    • 广度优先搜索在进一步探索图中的顶点之前,先访问当前顶点的所有邻接顶点。

    最小生成树

    • Kruskal 算法
      在这里插入图片描述
      • 此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。
    • Prim 算法
      在这里插入图片描述
      • 此算法可以称为“加点法”,每次迭代选择代价最小的边对应的点,加入到最小生成树中。算法从某一个顶点A开始,逐渐长大覆盖整个连通网的所有顶点。
  • 相关阅读:
    子线程循环10次,接着主线程循环100,接着又回到子线程循环10次.....如此循环50次
    java面向对象中的String类中12种常用的方法
    网络编程TCP协议-聊天室
    网络编程(UDP协议-聊天程序)
    Swing布局管理器
    java排序方法中的选择排序方法
    java排序方法中的插入排序方法
    java数组中的三种排序方法中的冒泡排序方法
    css3模仿雨滴(附源码)
    html5+css3实现3D图片(附源码)
  • 原文地址:https://www.cnblogs.com/chengmf/p/12461033.html
Copyright © 2020-2023  润新知