【数据结构】图

图是由一个顶点集V和一个弧集R构成的数据结构
分为有向图和无向图

名词和术语

网:弧或者边带权的图,称为有向网或者无向网
子图:顶点和弧都包含在另一个图G,则称这个图为图G的子图
完全图:n个顶点,边数为n(n-1)/2的无向图称为完全图
有向完全图:n个顶点,弧数为n(n-1)的有向图称为有向完全图
稠密(稀疏)图:边或弧的数量e>nlogn称为稠密图
度:和顶点V关联的边的数目称为度;对于有向图来说,分入度和出度,出度是从此顶点发出去的弧的数量,入度是指向顶点的弧的数量,在有向图中度(TD) = 出度(OD)+入度(ID)
连通图:图G中任意两个顶点都有路径相连,则称此图为连通图。
连通分量:如果无向图是非连通图,则图中各个极大连通子图称为此图的连通分量
强连通图:有向图中任意两个顶点之间都存在一条有向路径,称为强连通图
生成树:一个连通图有n个顶点和e条边,用其中n个顶点和n-1条边构成一个极小连通子图,称为生成树。

图的存储

邻接矩阵

对于一个有n个顶点的图,构造一个n*n的矩阵,将其中有连通的标为1,无(直接)连通的标为0
有向图的邻接矩阵为非对称矩阵,有向图的邻接矩阵可以是该顶点指向的顶点,也可以是指向该顶点的顶点(要体现出有向性)。
无向图的邻接矩阵为对称矩阵

邻接表

将每个顶点所指向的顶点,写在后面的表中

图的遍历

深度优先搜索(DFS)

从图中某个顶点V0出发,访问此顶点,然后依次访问从V0的各个没有被访问的邻接点出发深度优先搜索遍历图,直到图中所有的和V0有路径相通的顶点都被访问到。是一个递归的过程。

广度优先搜索(BFS)

从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些邻接点被访问的先后顺序依次访问他们的邻接点,直到图中所有和V0有路径相通的顶点都被访问到

最小生成树

构造网的一颗最小生成树,就是在e条带权边中选取n-1条边(没有回路),使“权值之和”为最小

普里姆算法

加顶点思想:取图中任意一个顶点v作为生成树的根,然后往树上添加新的顶点。已经在生成树上的顶点v和要添加的顶点w之间一定存在一条边,且这条边的权值在所有连通v和w的边权值中是最小的。直到生成树上有n-1条边为止。
O(n^2)

克鲁斯卡尔算法

加边思想:先构造一个只含n个顶点的子图,然后从权值最小的边开始,如果添加上这条边,不够成回路,就在子图中加上这条边,直到有n-1条边为止
O(eloge)

拓扑排序

按照有向图给出的次序关系,将图中的顶点排列成一个线性序列,对于没有定义次序关系的结点可以自定顺序。
有回路的有向图没有拓扑排序
方法:从图中选择一个没有前驱的结点输出,然后从有向图中删除这个顶点以及以这个顶点发出的弧。重复这一步,直到图空

关键路径

AOE网:用顶点表示事件,弧表示活动
关键活动:该弧上的权值增加,将使有向图上的最长路径的长度增加,是弧
关键路径:从源点到汇点的路径长度最长的路径叫关键路径
活动ai开始的最早时间e(i) = 弧尾事件的最早发生时间
活动ai开始的最晚时间l(i) = 弧头事件的最迟发生时间-弧的权值
e(i) = l(i)的活动就是关键活动
事件j的最早发生时间ve(j) = 从源点到顶点j的最长路径长度 = Max{前一个事件的最早发生时间+所连弧的权值}
时间j的最晚发生时间vl(j) =从顶点j到汇点的最短路径长度= Min{后面一个事件的最晚发生时间-所连弧的权值}

最短路径

从某个源点到其余各点的最短路径

迪杰斯特拉算法:将所有顶点分为两类,一类是已经确定从源点到此顶点最短路径的,一类是没有确定最短路径的。然后在没有确定最短路径的顶点中,选择权值之和最小的加入另一类,其中可以通过已经确定最短路径的结点进行连接。

每一对顶点之间的最短路径

弗洛伊德算法:先建立初始矩阵,不能经过任何顶点进行中转的权值。最开始只允许经过1号顶点进行中转,接下来只允许经过1和2号顶点进行中转……允许经过1~n号所有顶点进行中转,求任意两点之间的最短路程。用一句话概括就是:从i号顶点到j号顶点只经过前k号点的最短路程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值