【数据结构】图

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【数据结构】图,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、图的基本概念

  • : 一个图G是由两个集合V和E组成的,V是有限的非空顶点集。E是V上的顶点对所构成的边集,分别V(G)和E(G)来表示图中的顶点集和边集记作G =( V, E)
  • 顶点:图中每个结点称为顶点
  • 无向图 :例如图(a),每条边都没有方向,则称为无向图,在无向图中,边是无序的,并用圆括号表示,例如图(a)的两种表示

在这里插入图片描述
V(G1) = {V1,V2,V3,V4,V5};
E(G1) = {(V1,V2),(V2,V5),(V2,V3),(V3,V5),(V3,V4),(V1,V4)};

  • 有向图:例如图(b),每条边都用箭头指明了方向,则称为有向图。边是有序的,并用尖括号表示,例如图(b)的两种表示方法为

在这里插入图片描述
V(G2)= {V1,V2,V3,V4};

E(G2)= {<V1,V3>,<V3,V4>,<V4,V1>,<V1,V2>};

  • 无向完全图

    • 如果任意两个顶点间都有一条直接边相连,则称其为无向完全图
    • 具有n个顶点的无向完全图中,有 n(n-1) / 2 条边
      在这里插入图片描述
  • 有向完全图

    • 任意两个顶点间都有方向互为相反的两条边相连,则称该图为有向完全图
    • 具有n个顶点的有向完全图中,有 n(n-1)条边
  • 子图

    • 设有两个图G = (V,E)和 G1 = (V1,E1)
    • 且满足条件:V1是V的子集,E1是E的子集,则称G1为G的子图。
  • 路径、路径长度、简单路径和简单回路

    • 路径:在图G中从顶点Vp到顶点Vq的一条路径,路径是顶点序列;注:有向图的路径也是有向的
    • 路径长度:路径长度是指在这条路径上边的数目 ;路径(v1,v2),(v2,v3), (v3,v5) 记作(v1,v2,v3,v5),其路径长度为3
    • 简单路径: 除了第一个顶点和最后一个顶点之外,其余顶点都不同的路径,称为简单路径。例如:(v1,v2,v3,v1) 或 (v1,v2,v3,v4)
    • 简单回路:第一个顶点和最后一个顶点相同的简单路径为简单回路;例如:(v1,v2,v3,v1)
  • 连通图(无向图)与强连通图(有向图)

    • 在无向图中,若从一个顶点Vi到另一个顶点Vj(且i != j)有路径则称顶点Vi和Vj是连通的。若V(G)中每一对不同的顶点都是连通的,则称G是连通图。
    • 在有向图中,若V(G)中每一对不同的顶点Vi和Vj。都存在从Vi到Vj及Vj到Vi的路径,则称G是强连通图。
    • 注:对于n个顶点的无向图G,若G是连通图,则最少有n-1条边
  • 度、入度和出度

    • 度: 在无向图中,顶点所具有的边的数目称为该顶点的度。
    • 入度:在有向图中,以某顶点为终点的边的数目,称为该顶点的入度。
    • 出度:在有向图中,以某顶点为尾(始点)的边的数目称为该顶点的出度。
    • 注:一个顶点的出度与入度之和等于该顶点的度
    • 度与边的关系:所有顶点的度数之和等于边的二倍
  • 有权图

    • 对于图G = (V,E) ,若图中的每条边都具有一个相关的数,则这种与图的边相关的数称为该边的权,这种带权的图就称为权图或权网

二、图的存储结构

邻接矩阵表示法

对于有n个顶点的图,用一维数组vexs[n]存储顶点信息,用二维数组A[n][n]存储顶点之间关系的信息。该二维数组称为邻接矩阵。在邻接矩阵中,以顶点在vexs数组中的下标代表顶点,邻接矩阵中的元素A[i][j]存放的是顶点i到顶点j之间关系的信息。

  1. 若图为非权图
    • 顶点间有边用1来表示
    • 顶点间无边用0或∞来表示(只能用一种)
  2. 若图为权图
    • 用顶点间边的权值来表示
      在这里插入图片描述
      在这里插入图片描述

邻接表表示法

这是图的一种链式分配的存储结构,它包括两个部分,一部分是顶点数据,另一部分是指针域,指向一个包含相邻顶点的单链表。
例如:
在这里插入图片描述

三、图的遍历

  • 深度优先搜索法(DFS)
    • 类似于树的先根遍历
    • 选择图中的一个起点,访问相邻结点
    • 当访问不到顶点时进行回溯
    • 回溯用栈来实现(先进后出)
      在这里插入图片描述
  • 广度优先搜索法(BFS)
    • 类似于树的层次遍历
    • 选择一个顶点作为起点进行访问
    • 随后依次访问每层相邻的顶点
    • 可以通过队列来实现(先进先出)
      在这里插入图片描述

四、生成树

  • 有n个顶点
  • 有n – 1 条边且是连通图
  • 任意删除一条边,必定连通
  • 任意加一条边必定有环
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

最小生成树

克鲁斯卡尔算法

  • 依次加边
  • 步骤:
    • 先画出顶点
    • 把权值进行排序(从小到大)
    • 从左往右把边依次加进去
    • 注意:当形成环路时就不能加了
      例如:
      在这里插入图片描述
      排序:
      在这里插入图片描述

从左往右把最小的边依次加进去(不能形成环路):
在这里插入图片描述

普里姆算法

  • 依次加顶点
  • 步骤:
    • 第一步先选择一个顶点
    • 然后构造侯选边
    • 根据侯选边选择最小的权值连接,接着继续构造侯选边
    • 注意:不能形成环路,若有环路,则放弃侯选边
  • 例如:
    在这里插入图片描述
    最小且不会形成环路的几条侯选边分别是:
    S->A 7
    A->C 3
    C->D 3
    D->B 2
    D->T 2
    在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204348.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!