【数据结构】图


前言

图是一种较线性表和树更为复杂的数据结构。【感觉可以算是数据结构中最难掌握的一种】图的存储方式以及遍历方式相对比较复杂。

图的基本概念

无向图: 如果图中任意两个顶点之间的边都是无向边(简而言之就是没有方向的边),则称该图为无向图(Undirected graphs)。

有向图: 果图中任意两个顶点之间的边都是有向边(简而言之就是有方向的边),则称该图为有向图(Directed graphs)。

完全图:

  1. 无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。(含有n个顶点的无向完全图有(n×(n-1))/2条边)如下图所示:在这里插入图片描述
  2. 有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。(含有n个顶点的有向完全图有n×(n-1)条边)如下图所示:

在这里插入图片描述
顶点的度: 顶点Vi的度(Degree)是指在图中与Vi相关联的边的条数。对于有向图来说,有入度(In-degree)和出度(Out-degree)之分,有向图顶点的度等于该顶点的入度和出度之和。

邻接:

  1. 无向图中的两个顶点V1和V2存在一条边(V1,V2),则称顶点V1和V2邻接(Adjacent);
  2. 有向图中存在一条边<V3,V2>,则称顶点V3与顶点V2邻接,且是V3邻接到V2或V2邻接直V3;

路径 在无向图中,若从顶点Vi出发有一组边可到达顶点Vj,则称顶点Vi到顶点Vj的顶点序列为从顶点Vi到顶点Vj的路径(Path)。
连通: 若从Vi到Vj有路径可通,则称顶点Vi和顶点Vj是连通(Connected)的。

图的存储方式

数组

当两个结点之间有边联通时,矩阵相应位置元素为1,否则为0.
在这里插入图片描述

邻接表

邻接表是图的一种链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,每个结点由三个域组成:顶点、下一个结点域、相关信息。

十字链表

十字链表的存储方式并不常见,同时会造成过大的存储空间,并不经常使用。

图的遍历

图的遍历有两种方式:dfs和bfs。也就是算法中的分支限界法和回溯法。
深度优先搜索思想: 假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

广度优先搜索思想: 从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。

这两个部分在复习算法的时候再详细说明。

图的连通性问题

最小生成树

最小生成树有两种方法可以解决,一种是普利姆算法,另一种是克鲁斯卡尔算法。

Prim算法

Prim算法创建最小生成树的主要思路就是从候选节点中选择最小的权值添加到最小生成树中。

克鲁斯卡尔算法

克鲁斯卡尔则是在所有边中不断选择权重最小的一条,且不包含在回路内。
这两种算法都属于贪心算法。

有向无环图及其应用

AOV网络

用顶点表示活动,用边表示活动的先后顺序。
排序的步骤如下:
1、寻找图中的任何一个没有先行顶点的顶点;
2、输出此顶点,并将此顶点的所有边删除;
3、重复以上两个步骤,直至输出了所有顶点;

AOE网络

AOE有向图从源顶点到目的顶点,花费时间最长的一条路径(可以有多条关键路径)。
AOE寻找关键路径具体方法参考下面的文章【讲得很仔细】
原文链接:戳这里

最短路径

贪心算法好~
使用迪杰斯特拉和弗洛伊德算法

总结

图的知识点实在是太多啦。需要结合离散数学的知识才可以理解得更加透彻。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值