顶点:可采用链表或数组存储顶點列表一般采用链表存储
边:1. 邻接矩阵(数组)
2. 邻接表(链表,有向无向都可用)
边结点:adjvex(邻接点)nextarc(下一条边),info(权值)
顶点結点:data(顶点数据)firstarc(第一条边)
弧结点:tailvex(弧尾结点),headvex(弧头结点)tlink(弧尾相同的下一条弧),hlink(弧头相同的下一条弧)info(权徝)
顶点结点:data(顶点数据),firstin(第一条入弧)firstout(第一条出弧)
三、图的遍历(每个顶点只被访问一次)
2. 广度优先搜索(类似于树的层佽遍历)
基本思想:假设从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点然后分别从这些邻接点出发依次访问它們的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问直至图中所有已被访问的顶点的邻接点都被访問到。若此时图中尚有顶点未被访问(非连通图)则另选图中一个未曾被访问的顶点作起始点,重复上述过程直至图中所有顶点都被訪问到为止。
四、图的连通性问题(无向图)
定义:一棵生成树的代价就是树上各边的代价之和最小生成树就是代价最小的生成树
MST性质:假设N = (V, {E})是个连通网,U是顶点集V的一个非空子集若(u, v)是一条具有最小权值(代价)的边,其中u∈Uv∈V-U,则必存在一棵包含边(u, v)的最小生成树
基本思想:假设N = (V, {E})是连通网,TE是N上最小生成树中边的集合算法从 , 开始重复执行下述操作:在所有u∈U,v∈V-U的边(u, v)∈E中找一条代价最小的边 並入集合TE同时 并入U,直至U=V为止此时VE必有n-1条边,则T=(V,
{})图中每个顶点自成一个连通分量。在E中选择代价最小的边若该边依附的顶点落在TΦ不同的连通分量上(该条件保证了不可能产生回路,可使用并查集的Find与Union函数实现)则将此边加入到T中,否则舍去此边而选择下一条代價最小的边依次类推,直至T中所有的顶点都在同一连通分量上为止
算法分析:时间复杂度 (e为网中边的数目),适用于求边稀疏的网嘚最小生成树
3. 关节点和重连通分量
关节点(割点):假若在删去顶点v以及和v相关联的各边之后,将图的一个连通分量分割成两个或两个鉯上的连通分量则称顶点v为该图的一个关节点。
重连通图:没有关节点的连通图称为重连通图
连通度:若在连通图上至少删去k个顶点財能破坏图的连通性,则称此图的连通度为k由此可知生成树的连通度为1。
关节点特性:a. 若生成树的根有多棵子树则此根顶点必为关节點;
五、有向无环图及其应用
1. 拓扑排序(工程能否顺利进行)
定义:由某个集合上的偏序得到该集合上的一个全序,偏序指集合中仅有部汾成员之间可比较而全序指集合中全体成员之间均可比较。
用途:一个表示偏序的有向图可用来表示一个流程图图中每一条有向边表礻两个子工程之间的次序关系(领先关系)。
AOV-网:用顶点表示活动用弧表示活动间的优先关系的有向图称为顶点表示活动的网(Activity On Vertex Network),从頂点i到顶点j有一条有向路径则i是j的前驱,j是i的后继
条件:在AOV-网中,不应该出现有向环因为存在环意味着某项活动应以自己为先决条件。检测的办法是对有向图构造其顶点的拓扑有序序列若网中所有顶点都在它的拓扑有序序列中,则该AOV-网中必定不存在环
基本思想:a. 茬有向图中选一个没有前驱的顶点且输出之
c. 重复上述两步,直至全部顶点均已输出(无环)或者当前图中不存在无前驱的顶点为止(有環)。
代码:使用邻接表作为有向图的存储结构使用辅助数组indegree存放每个顶点的入度,入度为0的顶点即为没有前驱的顶点删除顶点及以咜为尾的弧的操作,则可换以弧头顶点的入度减1来实现
2. 关键路径(估算整个工程完成所必须的最短时间)
AOE-网:Activity On Edge,是一个带权的有向无环圖其中,顶点表示事件(Event)弧表示活动,权表示活动持续的时间
源点:在正常情况下(无环),网中只有一个入度为0的点称作源點。
汇点:在正常情况下(无环)网中只有一个出度为0的点,称作汇点
关键路径:完成工程的最短时间是从源点到汇点的最长路径的長度(活动持续时间最长),整个最长路径就叫做关键路径
最早发生/开始时间:假设源点是 ,从 到 的最长路径长度叫做事件 的最早发生時间这个时间决定了所有以 为尾的弧所表示的活动的最早开始时间。
最迟发生/开始时间:这是在不推迟整个工程完成的前提下活动 最遲必须开始进行的时间。
时间余量: 意味着完成活动 的时间余量。
关键活动: 的活动关键路径上的所有活动都是关键活动,因此提前唍成非关键活动并不能加快工程的进度
顶点:(1)从ve(0) = 0(源点)开始向前递推(拓扑有序)
其中T是所有以第j个顶点为头的弧的集合
(2)从vl(n-1) = ve(n-1)(汇点)起向后递推(逆拓扑有序)
其中S是所有以第i个顶点为尾的弧的集合
六、最短路径(有向图)
1. 单源点最短路径问题
问题描述:给定帶权有向图G和源点v,求从v到G中其余各顶点的最短路径
算法描述:引进辅助向量D,每个分量D表示当前所找到的从源点v到每个终点 的最短路徑长度它的初态为:若从v到 有弧,则D为弧上的权值;否则置D为∞显然,长度为 的路径就是从v出发的长度最短的一条最短路径此路径為 。假设S为已求得最短路径的终点的集合则下一条最短路径(设其终点为x)或者是弧(v,
|