第7章 图-有向无环图
《有向无环图的应用》课件
基于拓扑排序的算法实现
总结词
拓扑排序适用于有向无环图,通过排序可以确定图中各节点的先后顺序。
详细描述
基于拓扑排序的算法实现主要利用拓扑排序的性质,从入度为0的节点开始,依次访问相邻节点,并 将已访问的节点从图中删除。如果所有节点都被访问过,则说明该图为有向无环图。
基于动态规划的算法实现
总结词
动态规划算法可以高效地解决有向无环 图中的最长路径和最短路径问题。
详细描述
在复杂的网络结构中,路由器需要使用有向 无环图来表示网络拓扑结构,通过图的顶点 和边来表示网络中的节点和连接关系。通过 有向无环图,路由器可以快速计算出数据包 从源到目的地的最佳路径,提高网络传输效 率。
数据库设计中的ER图生成
总结词
有向无环图在数据库设计中用于生成实体关系图(ER图),帮助设计人员更好地理解 和管理数据库结构。
在程序设计中,流程图是一种重要的工具, 用于表示程序的执行流程。有向无环图可以 用来生成流程图,通过顶点和边来表示程序 的各个步骤和它们之间的逻辑关系。通过流 程图,程序员可以更好地理解程序的执行过
程,发现潜在的逻辑错误并进行优化。
社交网络分析中的影响力传播
要点一
总结词
要点二
详细描述
有向无环图在社交网络分析中用于研究影响力传播,帮助 理解信息如何在社交网络中传播。
基于图的分解的构建方法
该方法是将一个有向无环图分解成若干个子图,每个子图都 是一个强连通子图,然后将这些子图进行排序,最后将它们 连接起来形成完整的有向无环图。
具体步骤包括:将有向无环图中的所有顶点按照强连通性进 行分类;对每个强连通子图进行拓扑排序;将所有强连通子 图的拓扑序列连接起来,形成一个完整的序列。
数据结构章节练习题2
第七章图一、选择题1.图中有关路径的定义是()。
A.由顶点和相邻顶点序偶构成的边所形成的序列B.由不同顶点所形成的序列C.由不同边所形成的序列D.上述定义都不是2.设无向图的顶点个数为n,则该图最多有()条边。
A.n-1 B.n(n-1)/2 C.n(n+1)/2 D.0 E.n23.一个n个顶点的连通无向图,其边的个数至少为()。
A.n-1 B.n C.n+1 D.nlogn;4.要连通具有n个顶点的有向图,至少需要()条边。
A.n-l B.n C.n+l D.2n5.一个有n个结点的图,最少有(B )个连通分量,最多有(D )个连通分量。
A.0 B.1 C.n-1 D.n6. 下列说法不正确的是()。
A.图的遍历是从给定的源点出发每一个顶点仅被访问一次C.图的深度遍历不适用于有向图B.遍历的基本算法有两种:深度遍历和广度遍历D.图的深度遍历是一个递归过程7.无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()。
A.a,b,e,c,d,f B.a,c,f,e,b,d C.a,e,b,c,f,d D.a,e,d,f,c,b8. 在图采用邻接表存储时,求最小生成树的Prim 算法的时间复杂度为( )。
A. O(n)B. O(n+e)C. O(n2)D. O(n3)9. 求解最短路径的Floyd算法的时间复杂度为( )。
A.O(n) B. O(n+c) C. O(n*n)D. O(n*n*n)10.已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>,<V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
数据结构-有向无环图及其应用
WENKU DESIGN
2023-2026
ONE
KEEP VIEW
数据结构-有向无环图 及其应用
WENKU DESIGN
WENKU DESIGN
WENKU
REPORTING
https://
CATALOGUE
目 录
• 引言 • 有向无环图的基本概念 • 有向无环图的构建 • 有向无环图的应用场景 • 有向无环图的实际应用案例 • 有向无环图的未来研究方向和挑战
详细描述
目前有向无环图已经在许多领域得到应用,如社交网络分析、生物信息学和推荐系统等。未来可以进 一步探索有向无环图在金融、交通和能源等领域的应用,挖掘其更大的潜力。
提高有向无环图的表示能力和分析精度
总结词
提高有向无环图的表示能力和分析精度 是另一个重要的研究方向,旨在更好地 表示复杂数据关系和提高分析结果的准 确性。
拓扑排序
有向无环图可以用于进行拓扑排 序,即将图中所有节点按照依赖 关系进行排序,使得对于任何一 条从节点i到节点j的有向边,i都
在j之前出现。
关键路径
在项目管理中有向无环图可以用 于确定项目的关键路ห้องสมุดไป่ตู้,即确定
项目的最短完成时间路径。
PART 03
有向无环图的构建
构建有向无环图的算法
基于邻接矩阵的算法
通过构建一个二维矩阵来表示图的节点之间的关系,如果存在一条从节点i到节点j的 边,则矩阵中第i行第j列的值为1,否则为0。
基于邻接表的算法
使用一个列表来存储每个节点所连接的节点,如果存在一条从节点i到节点j的边 ,则在节点i的列表中添加节点j。
构建有向无环图的步骤
01
第7章 图论 [离散数学离散数学(第四版)清华出版社]
6/27/2013 6:02 PM
第四部分:图论(授课教师:向胜军)
21
例:
a j i h c g d
1(a)
无 向 图
b
f
e
2(b)
7(j) 8(g) 9(d) 10(i)
6(e)
3(c) 4(h)
5(f)
6/27/2013 6:02 PM
第四部分:图论(授课教师:向胜军)
22
例:
1(b)
有向图
第四部分:图论(授课教师:向胜军)
6
[定义] 相邻和关联
在无向图G中,若e=(a, b)∈E,则称a与 b彼此相邻(adjacent),或边e关联 (incident) 或联结(connect) a, b。a, b称为边e的端点或 结束顶点(endpoint)。 在有向图D中,若e=<a, b>∈E,即箭头 由a到b,称a邻接到b,或a关联或联结b。a 称为e的始点(initial vertex),b称为e的终点 (terminal/end vertex)。
证明思路:将图中顶点的度分类,再利用定理1。
6/27/2013 6:02 PM 第四部分:图论(授课教师:向胜军) 9
[定理3] 设有向图D=<V, E>有n个顶点,m 条边,则G中所有顶点的入度之和等于所 有顶点的出度之和,也等于m。
即:
d ( v i ) d ( v i ) m.
i 1 i 1
n
n
证明思路:利用数学归纳法。
6/27/2013 6:02 PM
第四部分:图论(授课教师:向胜军)
10
一些特殊的简单图:
(1) 无向完全图Kn(Complete Graphs)
第七章 第一讲 无向图及有向图
完全图举例
K5
3阶有向完全图
4阶竞赛图
子图(subgraph)
定义8 设G=<V,E>,G=<V ,E>为两个图(同为无 向图或同为有向图),若V V且E E,则称G 是G的子图,G为G 的母图,记作G G。 若V V或E E,则称G 为G的真子图。
若et∈E,使得et=<vi,vj>,则称vi为et的始点,vj为 et的终点,并称vi邻接到vj,vj邻接于vi。
若ek的终点为el的始点,则称ek与el相邻(adjacent)。 el ek vi vj
定义3 在无向图中,关联一对顶点的无向边如果多于1条 ,则称这些边为平行边,平行边的条数称为重数。
3
欧拉:传奇的一生
年少时,听从父亲的安排,巴塞尔大学,学习神学和希伯来语 ,结果被约翰· 伯努利欣赏,17岁获得硕士学位之后,才开始 专供数学。
为获得圣彼得堡科学院的医学部的职位空缺,欧拉在巴塞尔便 全力投入生理学的研究,并出席医学报告会。1727年,等他到 达俄罗斯时,叶卡捷琳娜一世女皇去世,他进入数学部。 1733年,欧拉回到瑞士,并结婚,一生共生育13个孩子,5个 存活。 为了赢得巴黎奖金而投身于一个天文学问题,那是几个有影响 的大数学家搞了几个月时间的,欧拉在三天之后把它解决了。 可是过分的劳累使他得了一场病,病中右眼失明了。 欧拉到底出了多少著作,直至1936年人们也没有确切的了解。 但据估计,要出版已经搜集到的欧拉著作,将需用大4开本60 4 至80卷。彼得堡学院为了整理他的著作整整花了 47年。
解: (3,3,2,1),(3,2,2,1,1) 不可以图化
(3,3,2,2)可以图化
(3,2,2,2,1)可以图化
数据结构-第7章图答案
7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;
离散数学第七章图的基本概念
4.无向图的连通性
若无向图G中任何两顶点都连通,则称G是连通图.
对于任意的无向图G.设V1,V2,…,Vk是顶点之间连通关系的 等价类,则称他们的导出子图为G的连通分支.用p(G)表示G 的连通分支数.
V1 e1
e2 e3
V3
e4 V2
V4
a
de
h
i
b
c
f
g
5.有向图的连通性
若略去有向图D中各边的键头,所得无向图是无向连通图,则 称D是弱连通图(或称D是连通图).
(2) mij d (vi )(i 1,2,..., n)
j 1
mn
nm
n
(3) mij mij d(vi ) 2m
j1 i1
i1 j1
i 1
m
(4) mij 0 vi是孤立点 j 1
(5)若第j列与第k列相同, 则说明e j与ek为平行边.
2.有向图的关联矩阵
设有向图D=<V,E>,V={v1,v2,…,vn},E={e1,e2,…,em} 1, vi为ej的始点
e1,e2,e3},{e1,e2,
e2
e4},{e9}等边割集 ,e9是桥.
e3 V4
e5 e6
V5 e4
V6
e9
V7
7.3 图的矩阵表示
1.无向图的关联矩阵
设无向图G=<V,E>,V={v1,v2,…,vn},E={e1,e2,…,em}
令mij为顶点vi与ej的关联次数, 则称(mij)n×m为G的关联矩阵.记为M(G)
若Γ 满足:vi-1,vi为ei的端点(若G为有向图,vi-1是ei的始 点,vi是ei的终点)i=1,2,…,k,则称Γ 为G中通路,v0,vk分 别称为通路的始点和终点,Γ 中边的数目k称为通路长度.
新编文档-有向无环图的应用-文档资料-精品文档
7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径
7.5 有向无环图及其应用
有向无环图(directed acycline graph)简 称DAG图,是描述一项工程或系统的进行过程的 有效工具。
②
①
③
②
①
②子项目之间无次序要求,即两个子项目可 以同时进行,互不影响。
7.5.1 拓扑排序
我们用一种有向图来表示上述问题。在 这种有向图中,顶点表示活动,有向边表示 活动的优先关系,这种有向图叫做顶点表示 活动的网络(Activity On Vertex Network) 简称为AOV网。
课程编号 C1 C2 C3 C4 C5 C6 C7 C8 C9 C 10 C11 C12
InitStack(S); for(i=0;i<G.vexnum; ++i)//建零入度顶点栈
if(!indegree[i])Push(S,i) //入度为0者进栈 count=0; //对输出顶点计数
while (!StackEmpty(S)) { Pop(S,i); printf(i,G.vertices[i].data); ++count;
C5
课程开设优先关系的有向图
图7-30 学生课程开设工程图
拓扑有序序列: (C1,C2,C3,C4,C5,C8,C9,C7,C6) (C2,C5,C1,C8,C3,C9,C4,C7,C6)
如何进行拓扑排序?
解决方法: 1)从有向图中选取一个没有前驱的顶点,并
输出之; 2)从有向图中删去此顶点以及所有以它为尾
//输出i号顶点并计数 for(p=G.vertices[i].firstarc; p; p=p->nextarc){
课次21——第七章03拓扑排序和关键路径
对有向图进行如下操作:按照有向图给出的次序关系,将图 中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶 点,则可以人为加上任意的次序关系。由此所得顶点的线性序列 称之为拓扑有序序列。
v3 v5
v9
v8
v4
v6
13 2020/8/4
7.5.2 关键路径(4)
在AOE网络中, 有些活动顺序进行,有些活动并行进行。
从源点到各个顶点,以至从源点到汇点的有向路径可能不止 一条。这些路径的长度也可能不同。完成不同路径的活动所 需的时间虽然不同,但只有各条路径上所有活动都完成了, 整个工程才算完成。
例:
C0
C1
C2
C0
C1
C2
C3
C4
C5
(a) 有向无环图
C0
C1
C2
C3
C4
C5
(b) 输出C4
C1
C2
C3
C5
(c) 输出顶点C0
9 2020/8/4
C3
C5
(d) 输出顶点C3
7.5.1拓扑排序(Topological Sort)(7)
C1
C2
C1
C5 (e) 输出顶点C2
C5 (f) 输出顶点C1
因此,完成整个工程所需的时间取决于从源点到汇点的最长 路径长度,即在这条路径上所有活动的持续时间之和。这条 路径长度最长的路径就叫做关键路径(Critical Path)。
子工程所需时间。 问:哪些子工程是“关键工程”? 即:哪些子工程将影响整个工程的完成期限的。
首先了解一些基本概念:
数据结构第七章--图(严蔚敏版)
8个顶点的无向图最多有 条边且该图为连通图 个顶点的无向图最多有28条边且该图为连通图 个顶点的无向图最多有 连通无向图构成条件:边 顶点数 顶点数-1)/2 顶点数*(顶点数 连通无向图构成条件 边=顶点数 顶点数 顶点数>=1,所以该函数存在单调递增的单值反 顶点数 所以该函数存在单调递增的单值反 函数,所以边与顶点为增函数关系 所以28个条边 函数 所以边与顶点为增函数关系 所以 个条边 的连通无向图顶点数最少为8个 所以28条边的 的连通无向图顶点数最少为 个 所以 条边的 非连通无向图为9个 加入一个孤立点 加入一个孤立点) 非连通无向图为 个(加入一个孤立点
28
无向图的邻接矩阵为对称矩阵
2011-10-13
7.2
图的存储结构
Wij 若< vi,vj > 或<vj,v i > ∈E(G)
若G是网(有权图),邻接矩阵定义为 是网(有权图), ),邻接矩阵定义为
A [ i,j ] = , 0或 ∞
如图: 如图:
V1
若其它
V2
3 4
2
V3
2011-10-13
C
A
B
D 2011-10-13 (a )
3
Königsberg七桥问题
• Königsberg七桥问题就是说,能否从某点出发 通过每桥恰好一次回到原地?
C
C
A B
.
A D
B
D (a)
2011-10-13
(b)
4
第七章 图
7.1 图的定义 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径
2011-10-13
ch7复习及习题-new
有向图的邻接矩阵中第i行“1”的个数是第i个顶点的 ,第i 列“1” 的个数是第i个顶点的 。在无向图的邻接矩阵中, 第i行(列)中 ”1”的个数是第i个顶点的 。
一个有1000个顶点、1000条边的有向图的邻接矩阵有 元素,(是/否)稀疏矩阵。
个矩阵
一个连通图的生成树是该图的 连通子图,n个顶点的无向 连通图的邻接矩阵至少有 个非零元素。 在含 n 个顶点和 e 条边的有向图的邻接矩阵中 , 零元素的个数 为 。 A.e B.2e C.n2-e D.n2-2e
条
若一个有向图的邻接矩阵中对角线以下元素为0,则该图的拓 扑有序序列必定存在.(对/错) 判断一个有向图是否存在回路除了可用拓扑排序方 法以外,还可用 。
邻接矩阵A=
该图共有
条弧,如果是无向图,该图共有
0 1 0 1 0 1 0 1 0
,该图有
个顶点,如果是有向图,
条边。
n个顶点的无向图采用邻接矩阵表示,图中的边数等于邻接矩 阵中非零元素之和的一半。(对/错)
7. 7 对右图所示的无向带权图,
1) 写出它的邻接矩阵,并按Prim 算法求其最小生成树
2) 写出它的邻接表,并按Kruskal 算法求其最小生成树。
e b a d f h g b a c
e f d
h g
c
7.9 试列出下示图中全部可能的拓 扑有序序列,并指出用算法7.12求 得的是哪个序列(注意:应先确定 其存储结构)。 2 1 5 6 1 2 3 6 4 6 3 4 2 3 4 3 6 4
无 向 图
数 组
邻 接 表
十 字 链 表
邻 遍历 最小生成树 最短路径 接 P K F D 多 D B R R L I 重 F F I U O J 表 S S M S Y K D A L
数据结构 习题 第七章 图 答案
第7章图二.判断题部分答案解释如下。
2. 不一定是连通图,可能有若干连通分量 11. 对称矩阵可存储上(下)三角矩阵14.只有有向完全图的邻接矩阵是对称的 16. 邻接矩阵中元素值可以存储权值21. 只有无向连通图才有生成树 22. 最小生成树不唯一,但最小生成树上权值之和相等26. 是自由树,即根结点不确定35. 对有向无环图,拓扑排序成功;否则,图中有环,不能说算法不适合。
42. AOV网是用顶点代表活动,弧表示活动间的优先关系的有向图,叫顶点表示活动的网。
45. 能求出关键路径的AOE网一定是有向无环图46. 只有该关键活动为各关键路径所共有,且减少它尚不能改变关键路径的前提下,才可缩短工期。
48.按着定义,AOE网中关键路径是从“源点”到“汇点”路径长度最长的路径。
自然,关键路径上活动的时间延长多少,整个工程的时间也就随之延长多少。
三.填空题1.有n个顶点,n-1条边的无向连通图2.有向图的极大强连通子图3. 生成树9. 2(n-1) 10. N-1 11. n-1 12. n 13. N-1 14. n15. N16. 3 17. 2(N-1) 18. 度出度 19. 第I列非零元素个数 20.n 2e21.(1)查找顶点的邻接点的过程 (2)O(n+e) (3)O(n+e) (4)访问顶点的顺序不同 (5)队列和栈22. 深度优先 23.宽度优先遍历 24.队列25.因未给出存储结构,答案不唯一。
本题按邻接表存储结构,邻接点按字典序排列。
25题(1) 25题(2) 26.普里姆(prim )算法和克鲁斯卡尔(Kruskal )算法 27.克鲁斯卡尔28.边稠密 边稀疏 29. O(eloge ) 边稀疏 30.O(n 2) O(eloge) 31.(1)(V i ,V j )边上的权值 都大的数 (2)1 负值 (3)为负 边32.(1)n-1 (2)普里姆 (3)最小生成树 33.不存在环 34.递增 负值 35.16036.O(n 2) 37. 50,经过中间顶点④ 38. 75 39.O(n+e )40.(1)活动 (2)活动间的优先关系 (3)事件 (4)活动 边上的权代表活动持续时间41.关键路径 42.(1)某项活动以自己为先决条件 (2)荒谬 (3)死循环 43.(1)零 (2)V k 度减1,若V k 入度己减到零,则V k 顶点入栈 (3)环44.(1)p<>nil (2)visited[v]=true (3)p=g[v].firstarc (4)p=p^.nextarc45.(1)g[0].vexdata=v (2)g[j].firstin (3)g[j].firstin (4)g[i].firstout (5)g[i].firstout (6)p^.vexj (7)g[i].firstout (8)p:=p^.nexti (9)p<>nil (10)p^.vexj=j(11)firstadj(g,v 0) (12)not visited[w] (13)nextadj(g,v 0,w)46.(1)0 (2)j (3)i (4)0 (5)indegree[i]==0 (6)[vex][i] (7)k==1 (8)indegree[i]==047.(1)p^.link:=ch[u ].head (2)ch[u ].head:=p (3)top<>0 (4)j:=top (5)top:=ch[j].count(6)t:=t^.link48.(1)V1 V4 V3 V6 V2 V5(尽管图以邻接表为存储结构,但因没规定邻接点的排列,所以结果是不唯一的。
第7章图(Graphs)
7.1 图的概念及术语
v1 v3 有向边<v3, v4> V3:始点, v4: 终点 v2 v4
图的构成: • 结点集:V={v1,v2,v3,v4}, • 有向边集:E={<v1,v3>,<v1,v2>,<v3,v4>,<v4,v1>}
7.1 图的概念及术语
v1 v3 v2 v4 v1 v2
v3
为从顶点vi 到顶点 vj 的路径。 • 路径长度 –非带权图的路径长度是指此路径上的边数。 –带权图的路径长度是指路径上各边的权之和
7.1 图的概念及术语
• 简单路径 若路径上各顶点 v1,v2,...,vm 均不互相重 复, 则称这样的路径为简单路径。 • 回路 若路径上第一个顶点 v1 与最后一个顶点vm 重合, 则称这样的路径为回路或环。 • 连通图与连通分量 在无向图中, 若从顶点v1到顶 点v2有路径, 则称顶点v1与v2是连通的。 • 如果图中任意一对顶点都是连通的, 则称此图是连 通图。 • 非连通图的极大连通子图叫做连通分量.
7.1 图的概念及术语
v1
v2
v4Βιβλιοθήκη v3路径: (1) <v1, v3>, <v3, v4> (简单路径)
(2) <v1, v3>, <v3, v4>, <v4, v1> (环)
(3) <v3, v4>
7.1 图的概念及术语
• 路径: 在图 G=(V, E) 中, 若存在边的序列 (vi, vp1)、(vp1, vp2)、...、(vpm, vj) 则称顶点序列 ( vi vp1 vp2 ... vpm vj )
v4 v5
第7章图历年试题及参考答案(08)
第7章图历年试题及参考答案(08)第7章图(2008年1⽉)9、假设有.向图含n 个顶点及e 条弧,则表⽰该图的邻接表中包含的弧结点个数为()A 、nB 、eC 、2eD 、n ·e10、如图所⽰的有向⽆环图可以得到的不同拓扑序列的个数为()A 、1B 、2C 、3D 、422、已知⼀个有向⽹如图所⽰,从顶点1到顶点4的最短路径长度为___________。
28、已知有向图的邻接表如图所⽰,(1) 写出从顶点A 出发,对该图进⾏⼴度优先搜索遍历的顶点序列;(2) 画出该有向图的逆.邻接表。
(1)(2)33、设有向图邻接表定义如下;typedef struct{VertexNode adjlist[Max VertexNum];int n,e; //图的当前顶点数和弧数} ALGraph;其中顶点表结点VertexNode 边表结点EdegNode 结构为:阅读下列算法f33,并回答问题:(1)已知有向图G 的邻接表如图所⽰, 写出算法f33的输出结果;(2)简述算法f33的功能。
void dfs (ALGraph *G,int v){EdgeNode * p;visited[v]=TRUE;printf("%c",G->adjlist[v].vertex);for(p=(G->adjlist[v]).firstedge; p; p=p->next)if(! visited[p->adjvex])dfs (G, p->adjvex);}void f33(ALGraph *G){int v,w;for(v=0; v n; v ++) {for(w=0;wn; w++)visited[w]= FALSE;printf("%d:",v);dfs(G,v);printf("\n");}}(1)(2)(2008年10⽉)8、在⼀个具有n个顶点的有向图中,所有顶点的出度之和为Dout ,则所有顶点的⼊度之和为()A、DoutB、Dout-1C、Dout+1D、n9、如图所⽰的有向⽆环图可以得到的拓扑序列的个数是()A、3B、4C、5D、610、如图所⽰的带权⽆向图的最⼩⽣成树的权为()A 、 51B 、 52C 、 54D 、 5622、n 个顶点且含有环路的⽆向连通图中,⾄少含有条边。
ch7图
顶点Vi的出度是A中第i行元素之和
顶点Vi的入度是A中第i列元素之和
网络的邻接矩阵可定义为:
A[i,
j]
ij , 若(vi ,
,反之
v j)或
vi ,
vj
E(G)
例:
v1
5
v2
3
7
8 v5
4
1
6
v3
v4
2
网络
5 7 3
5
4
8
A
7
2
1
4 2 6
3 8 1 6
网络的邻接矩阵
关联矩阵——表示顶点与边的关联关系的矩阵
data firstarc
}VNode;
#define M 20 VNode AdjList[M]; //AdjList[0]不用
例: a
b
c
d
e
G1
data firstarc
1a
2
2b
1
3c
2
4d
1
5e
2
adjvex next
4^ 3 4 3^ 3^
5^ 5^
例: a
b
c
d
G2
data firstarc
或(w,v),并且(v,w)=(w,v)
例:
v2
v4
v5
v1
v3
v6
G1 图G1中:V(G1)={v1, v2, v3, v4, v5, v6} E(G1)={<v1, v2>, <v2, v1>, <v2, v3>, <v2, v4>, <v3, v5>, <v5, v6>, <v6, v3>}
有向无环图及其应用
有向树, 图7.15 有向树,DAG图和有向图一例 图和有向图一例
(2)表达式子式共享 ) 例如,下述表达式 例如,下述表达式((a +b ) * (b * (c + d)) + (c + d) * e) * ((c + d) * e),用 , 二叉树表示如图7.16所示,用有向无环图表示如图7.17所示. 所示, 所示. 二叉树表示如图 所示 用有向无环图表示如图 所示 * + * + a b b c * + d 图7.16 用二叉树描述表达式 c + d * e c + d * e
count = 0; while (!StackEmpty (S)) { Pop (S, i); printf (i, G.vertices[i].data); //输出 号顶点并计数 输出i号顶点并计数 输出 ++ count; for (p = G.vertices[i].firstarc; p; p = p->nextarc) { - k = p->adjvex; //对i号顶点的每个邻接点的入度减 号顶点的每个邻接点的入度减1 - 对 号顶点的每个邻接点的入度减 if (!(――indegree[k])) Push (S, k); //若入度减为 ,则入栈 若入度减为0, 若入度减为 } // for } // while if (count < G.vexnum) return ERROR; //该有向图有回路 该有向图有回路 } // TopologicalSort
v6 → v1 → v 4 → v3 → v 2 → v5
£7.5.3 关键路径
(1)定义 ) 关键路径( ):在 网中有些活动可以并行的进行, 关键路径(Critical Path):在AOE-网中有些活动可以并行的进行, ): 网中有些活动可以并行的进行 所以完成工程的最短时间是从开始点到完成点的最长路径的长度( 所以完成工程的最短时间是从开始点到完成点的最长路径的长度(路径 长度是指路径上各活动持续时间之和,而不是路径上弧的数目). ).这个 长度是指路径上各活动持续时间之和,而不是路径上弧的数目).这个 路径长度最长的路径叫关键路径. 路径长度最长的路径叫关键路径. 关键活动: 的活动. 关键活动:l(i) = e(i)的活动.即活动的最早开始时间=最迟开始时间. 的活动 即活动的最早开始时间=最迟开始时间. 显然,关键路径上的所有活动都是关键活动. 显然,关键路径上的所有活动都是关键活动. (2)AOE-网 ) 网 AOE-网(Activity On Edge):即边表示活动的网.AOE-网是一个 网 ):即边表示活动的网 ):即边表示活动的网. 网是一个 带权的有向无环图.其中,顶点表示事件(Event),弧表示活动,权 带权的有向无环图.其中,顶点表示事件( ),弧表示活动, ),弧表示活动 表示活动持续的时间. 表示活动持续的时间.
《离散数学》第七章图的基本概念讲稿
《离散数学》第七章图的基本概念讲稿7.1 ⽆向图及有向图⼀、本节主要内容⽆向图与有向图顶点的度数握⼿定理简单图完全图⼦图补图⼆、教学内容⽆序对: 两个元素组成的⼆元组(没有顺序),即⽆论a,b是否相同,(a,b )=(b, a )⽆序积: A与B 为两个集合,A&B={(x,y) |x∈A∧y∈B}例A={a1, a2}, B={b1, b2}A&B={(a1 , b1 ), (a1 , b2 ) ,(a2 , b1 ) ,(a2 , b2 )}A&A={(a1 , a1 ), (a1 , a2 ) ,(a2 , a2 )}多重集合: 元素可以重复出现的集合⽆向图与有向图定义⽆向图G=, 其中(1) V?≠为顶点集,元素称为顶点(2) E为V&V的多重⼦集,其元素称为⽆向边,简称边.例如, G=如图所⽰,其中V={v1, v2, …,v5},E={(v1,v1), (v1,v2), (v2,v3), (v2,v3), (v2,v5), (v1,v5), (v4,v5)}定义⽆向图G=, 其中(1) V≠?为顶点集,元素称为顶点(2) E为V&V的多重⼦集,其元素称为⽆向边,简称边.例如, G=如图所⽰,其中V={v1, v2, …,v5},E={(v1,v1), (v1,v2), (v2,v3), (v2,v3), (v2,v5), (v1,v5), (v4,v5)} ⽆向图与有向图(续)定义有向图D=, 其中(1) V同⽆向图的顶点集, 元素也称为顶点(2) E为V?V的多重⼦集,其元素称为有向边,简称边.⽤⽆向边代替D的所有有向边所得到的⽆向图称作D的基图右图是有向图,试写出它的V和E⽆向图与有向图(续)通常⽤G表⽰⽆向图, D表⽰有向图,也常⽤G泛指⽆向图和有向图,⽤ek表⽰⽆向边或有向边.V(G), E(G), V(D), E(D): G和D的顶点集, 边集.n 阶图: n个顶点的图有限图: V, E都是有穷集合的图零图: E=?平凡图: 1 阶零图顶点和边的关联与相邻定义设ek=(vi, vj)是⽆向图G=的⼀条边, 称vi, vj为ek的端点, ek与vi ( vj)关联.若vi ≠ vj, 则称ek与vi ( vj)的关联次数为1;若vi = vj, 则称ek为环, 此时称ek与vi 的关联次数为2;若vi不是ek端点, 则称ek与vi 的关联次数为0.⽆边关联的顶点称作孤⽴点.定义设⽆向图G=, vi,vj∈V,ek,el∈E,若(vi,vj) ∈E, 则称vi,vj相邻;若ek,el⾄少有⼀个公共端点, 则称ek,el相邻.对有向图有类似定义. 设ek=?vi,vj?是有向图的⼀条边, vi,vj是ek端点,⼜称vi 是ek的始点, vj是ek的终点,vi邻接到vj, vj邻接于vi.邻域和关联集设⽆向图G , v ∈V(G)v 的邻域 N(v)={u|u ∈V(G)∧(u,v)∈E(G)∧u ≠v} v 的闭邻域 = N(v)∪{v} v 的关联集 I(v)={e|e ∈E(G)∧e 与v 关联} 设有向图D, v ∈V(D)v 的后继元集 ={u|u ∈V(D)∧∈E(G)∧u ≠v}v 的先驱元集 ={u|u ∈V(D)∧∈E(G)∧u ≠v}v 的邻域v 的闭邻域顶点的度数设G=为⽆向图, v ∈V,v 的度数(度) d(v): v 作为边的端点的次数之和悬挂顶点: 度数为1的顶点悬挂边: 与悬挂顶点关联的边 G 的最⼤度?(G)=max{d(v)| v ∈V} G 的最⼩度δ(G)=min{d(v)| v ∈V} 例如 d(v5)=3, d(v2)=4, d(v1)=4, ?(G)=4, δ(G)=1,v4是悬挂顶点, e7是悬挂边, e1是环顶点的度数(续)设D=为有向图, v ∈V,v 的出度d+(v): v 作为边的始点的次数之和 v 的⼊度d -(v): v 作为边的终点的次数之和 v 的度数(度) d(v): v 作为边的端点次数之和 d(v)= d+(v)+ d-(v)D 的最⼤出度?+(D), 最⼩出度δ+(D) 最⼤⼊度?-(D), 最⼩⼊度δ-(D) 最⼤度?(D), 最⼩度δ(D) 例如 d+(a)=4, d-(a)=1, d(a)=5, d+(b)=0, d-(b)=3, d(b)=3,+(D)=4, δ+(D)=0, ?-(D)=3, δ-(D)=1, ?(D)=5, δ(D)=3. 图论基本定理——握⼿定理定理任意⽆向图和有向图的所有顶点度数之和都等于边数的2倍, 并且有向图的所有顶点⼊度之和等于出度之和等于边数.)(v N )(v D +Γ)(v D -Γ)()()(v v v N D D D -+ΓΓ= }{)()(v v N v N D D =证 G 中每条边(包括环)均有两个端点,所以在计算G 中各顶点度数之和时,每条边均提供2度,m 条边共提供2m 度.有向图的每条边提供⼀个⼊度和⼀个出度, 故所有顶点⼊度之和等于出度之和等于边数. 握⼿定理(续)推论在任何⽆向图和有向图中,度为奇数的顶点个数必为偶数. 证设G=为任意图,令 V1={v | v ∈V ∧d(v)为奇数} V2={v | v ∈V ∧d(v)为偶数}则V1∪V2=V, V1∩V2=?,由握⼿定理可知∑∑∑∈∈∈+==21)()()(2V v V v Vv v d v d v d m由于2m,∑∈2)(V v v d 均为偶数,所以 ∑∈1)(V v v d 也为偶数, 但因为V1中顶点度数都为奇数,所以|V1|必为偶数.图的度数列设⽆向图G 的顶点集V={v1, v2, …, vn} G 的度数序列: d(v1), d(v2), …, d(vn) 如右图度数序列:4,4,2,1,3设有向图D 的顶点集V={v1, v2, …, vn} D 的度数序列: d(v1), d(v2), …, d(vn) D 的出度序列: d+(v1), d+(v2), …, d+(vn) D 的⼊度序列: d -(v1), d -(v2), …, d -(vn) 如右图度数序列:5,3,3,3出度序列:4,0,2,1 ⼊度序列:1,3,1,2 握⼿定理的应⽤例1 (3,3,3,4), (2,3,4,6,8)能成为图的度数序列吗? 解不可能. 它们都有奇数个奇数.例2 已知图G 有10条边, 4个3度顶点, 其余顶点的度数均⼩于等于2, 问G ⾄少有多少个顶点? 解设G 有n 个顶点. 由握⼿定理, 4?3+2?(n-4)≥2?10 解得 n ≥8握⼿定理的应⽤(续)例3 给定下列各序列,哪组可以构成⽆向图的度数序列 (2,2,2,2,2) (1,1,2,2,3) (1,1,2,2,2) (1,3,4,4,5)多重图与简单图定义(1) 在⽆向图中,如果有2条或2条以上的边关联同⼀对顶点, 则称这些边为平⾏边, 平⾏边的条数称为重数.(2)在有向图中,如果有2条或2条以上的边具有相同的始点和终点, 则称这些边为有向平⾏边, 简称平⾏边, 平⾏边的条数称为重数.(3) 含平⾏边的图称为多重图.(4) 既⽆平⾏边也⽆环的图称为简单图.注意:简单图是极其重要的概念多重图与简单图(续)例如e5和e6 是平⾏边重数为2不是简单图e2和e3 是平⾏边,重数为2 e6和e7不是平⾏边不是简单图图的同构定义设G1=, G2=为两个⽆向图(有向图), 若存在双射函数f: V1→V2, 使得对于任意的vi,vj∈V1,(vi,vj)∈E1(∈E1)当且仅当(f(vi),f(vj))∈E2(∈E2),并且,(vi,vj)()与(f(vi),f(vj))()的重数相同,则称G1与G2是同构的,记作G1?G2.图的同构(续)⼏点说明:图之间的同构关系具有⾃反性、对称性和传递性.能找到多条同构的必要条件, 但它们都不是充分条件:①边数相同,顶点数相同②度数列相同(不计度数的顺序)③对应顶点的关联集及邻域的元素个数相同,等等若破坏必要条件,则两图不同构图的同构(续)例1 试画出4阶3条边的所有⾮同构的⽆向简单图例2 判断下述每⼀对图是否同构:(1)度数列不同不同构例2 (续)(2)不同构⼊(出)度列不同度数列相同但不同构为什么?完全图与正则图n阶⽆向完全图Kn: 每个顶点都与其余顶点相邻的n阶⽆向简单图.简单性质: 边数m=n(n-1)/2, ?=δ=n-1n阶有向完全图: 每对顶点之间均有两条⽅向相反的有向边的n阶有向简单图.简单性质: 边数m=n(n-1), ?=δ=2(n-1),+=δ+=?-=δ-=n-1n阶k正则图: ?=δ=k 的n阶⽆向简单图简单性质: 边数m=nk/2完全图与正则图(续)(1) 为5阶⽆向完全图K5(2) 为3阶有向完全图(3) 为彼得森图, 它是3 正则图⼦图定义设G=, G '=是2个图(1) 若V '?V且E '?E, 则称G '为G的⼦图, G为G '的母图, 记作G '?G(2)若G '?G且G '≠ G(即V '?V 或E '?E),称G '为G的真⼦图(3) 若G '?G 且V '=V,则称G '为G的⽣成⼦图(4) 设V '?V 且V '≠?, 以V '为顶点集, 以两端点都在V '中的所有边为边集的G的⼦图称作V '的导出⼦图,记作G[V '](5) 设E '?E且E '≠?, 以E '为边集, 以E '中边关联的所有顶点为顶点集的G的⼦图称作E '的导出⼦图, 记作G[E ']⼦图(续)例画出K4的所有⾮同构的⽣成⼦图补图定义设G=为n阶⽆向简单图,以V为顶点集,所有使G成为完全图Kn的添加边组成的集合为边集的图,称为G的补图,记作G?G.若G ? G , 则称G 是⾃补图.例画出5阶7条边的所有⾮同构的⽆向简单图⾸先,画出5阶3条边的所有⾮同构的⽆向简单图然后,画出各⾃的补图7.2 通路、回路与图的连通性⼀、本节主要内容简单通(回)路, 初级通(回)路, 复杂通(回)路⽆向连通图, 连通分⽀弱连通图, 单向连通图, 强连通图点割集与割点边割集与割边(桥) ⼆、教学内容通路与回路定义给定图G=(⽆向或有向的),设G 中顶点与边的交替序列Γ=v0e1v1e2…elvl ,(1) 若?i(1≤i ≤l), vi -1 和 vi 是ei 的端点(对于有向图, 要求vi -1是始点, vi 是终点), 则称Γ为通路, v0是通路的起点, vl 是通路的终点, l 为通路的长度. ⼜若v0=vl ,则称Γ为回路. (2) 若通路(回路)中所有顶点(对于回路, 除v0=vl)各异,则称为初级通路(初级回路).初级通路⼜称作路径, 初级回路⼜称作圈.(3) 若通路(回路)中所有边各异, 则称为简单通路(简单回路), 否则称为复杂通路(复杂回路). 通路与回路(续) 说明:在⽆向图中,环是长度为1的圈, 两条平⾏边构成长度为2的圈. 在有向图中,环是长度为1的圈, 两条⽅向相反边构成长度为2的圈. 在⽆向简单图中, 所有圈的长度≥3; 在有向简单图中, 所有圈的长度≥2. 通路与回路(续)定理在n 阶图G 中,若从顶点vi 到vj (vi ≠vj )存在通路,则从vi 到vj 存在长度⼩于等于n -1的通路.推论在n 阶图G 中,若从顶点vi 到vj (vi ≠vj )存在通121212G G G G G G ??例设与均为⽆向简单图,当且仅当路,则从vi到vj存在长度⼩于等于n-1的初级通路.定理在⼀个n阶图G中,若存在vi到⾃⾝的回路,则⼀定存在vi到⾃⾝长度⼩于等于n的回路.推论在⼀个n阶图G中,若存在vi到⾃⾝的简单回路,则⼀定存在长度⼩于等于n的初级回路.⽆向图的连通性设⽆向图G=,u与v连通: 若u与v之间有通路. 规定u与⾃⾝总连通.连通关系R={| u,v ∈V且u~v}是V上的等价关系连通图: 平凡图, 或者任意两点都连通的图连通分⽀: V关于R的等价类的导出⼦图设V/R={V1,V2,…,Vk}, G[V1], G[V2], …,G[Vk]是G的连通分⽀, 其个数记作p(G)=k.G是连通图? p(G)=1u与v之间的短程线: u与v之间长度最短的通路(u与v连通)u与v之间的距离d(u,v): u与v之间短程线的长度若u与v不连通, 规定d(u,v)=∞.性质:d(u,v)≥0, 且d(u,v)=0 ? u=vd(u,v)=d(v,u)(对称性)d(u,v)+d(v,w)≥d(u,w) (三⾓不等式)点割集记G-v: 从G中删除v及关联的边G-V': 从G中删除V'中所有的顶点及关联的边G-e : 从G中删除eG-E': 从G中删除E'中所有边定义设⽆向图G=, 如果存在顶点⼦集V'?V, 使p(G-V')>p(G),⽽且删除V'的任何真⼦集V''后(? V''?V'),p(G-V'')=p(G), 则称V'为G的点割集. 若{v}为点割集, 则称v为割点.点割集(续)例{v1,v4}, {v6}是点割集, v6是割点.{v2,v5}是点割集吗?边割集定义设⽆向图G=, E'?E, 若p(G-E')>p(G)且?E''?E',p(G-E'')=p(G), 则称E'为G的边割集. 若{e}为边割集, 则称e为割边或桥.在上⼀页的图中,{e1,e2},{e1,e3,e5,e6},{e8}等是边割集,e8是桥,{e7,e9,e5,e6}是边割集吗?⼏点说明:Kn⽆点割集n阶零图既⽆点割集,也⽆边割集.若G连通,E'为边割集,则p(G-E')=2若G连通,V'为点割集,则p(G-V')≥2有向图的连通性设有向图D=u可达v: u到v有通路. 规定u到⾃⾝总是可达的.可达具有⾃反性和传递性D弱连通(连通): 基图为⽆向连通图D单向连通: ?u,v∈V,u可达v 或v可达uD强连通: ?u,v∈V,u与v相互可达强连通?单向连通?弱连通有向图的连通性(续)例下图(1)强连通, (2)单连通, (3) 弱连通有向图的短程线与距离u到v的短程线: u到v长度最短的通路(u可达v)u与v之间的距离d: u到v的短程线的长度若u不可达v, 规定d=∞.性质:d+d ≥d注意: 没有对称性7.3 图的矩阵表⽰⼀、本节主要内容⽆向图的关联矩阵有向图的关联矩阵有向图的邻接矩阵有向图的可达矩阵⼆、教学内容⽆向图的关联矩阵定义设⽆向图G=, V={v1, v2, …, vn}, E={e1, e2, …, em}, 令mij为vi与ej的关联次数,称(mij)n?m为G的关联矩阵,记为M(G).定义设⽆向图G=, V={v1, v2, …, vn}, E={e1, e2, …, em}, 令mij为vi与ej的关联次数,称(mij)n?m为G的关联矩阵,记为M(G).性质关联次数为可能取值为0,1,2有向图的关联矩阵定义设⽆环有向图D=, V={v1, v2, …, vn}, E={e1, e2, …, em}, 令则称(mij)n ?m 为D 的关联矩阵,记为M(D). 性质:有向图的邻接矩阵定义设有向图D=, V={v1, v2, …, vn}, E={e1, e2, …, em}, 令 )1(ij a 为顶点vi 邻接到顶点vj 边的条数,称()1(ij a )n ?n 为D 的邻接矩阵, 记作A(D), 简记为A. 1110001110()1001200000M G=1100010111()0000101110M D ---?=-??-??平⾏边的列相同)4(2)3(),...,2,1()()2(),...,2,1(2)1(,11mm n i v d m m j m ji ijimj ijni ij =====∑∑∑==(1)1(1)1(1)(),1,2,...,(2)(),1,2,...,nij i j n ij ji a d vi n a d v j n+=-=====∑∑性质D 中的通路及回路数定理设A 为n 阶有向图D 的邻接矩阵, 则Al(l ≥1)中元素)(l ij a 为D 中vi 到vj 长度为 l 的通路数, )(l ii a 为vi 到⾃⾝长度为 l 的回路数,∑∑==n i nj l ija11)( 为D 中长度为 l 的通路总数,∑=ni l iia1)( 为D 中长度为 l 的回路总数.D 中的通路及回路数(续)推论设Bl=A+A2+…+Al(l ≥1), 则Bl 中元素为D 中长度⼩于或等于l 的通路数,为D 中长度⼩于或等于l 的回路数. 例有向图D 如图所⽰, 求A, A2, A3, A4, 并回答问题:(1) D 中长度为1, 2, 3, 4的通路各有多少条?其中回路分别为多少条? (2) D 中长度⼩于或等于4的通路为多少条?其中有多少条回路?12100010()00010010A D=有向图的可达矩阵定义设D=为有向图, V={v1, v2, …, vn}, 令称(pij)n ?n 为D 的可达矩阵, 记作P(D), 简记为P. 性质:P(D)主对⾓线上的元素全为1.D 强连通当且仅当P(D)的元素全为1. 有向图的可达矩阵(续)例右图所⽰的有向图D 的可达矩阵为7.4 最短路径及关键路径⼀、本节主要内容最短路关键路线⼆、教学内容对于有向图或⽆向图G 的每条边,附加⼀个实数w(e),则称w(e)为边e 上的权. G 连同附加在各边上的实数,称为带权图.设带权图G=,G 中每条边的权都⼤于等于0.u,v 为G 中任意两个顶点,从u 到v 的所有通=1101110111110001P路中带权最⼩的通路称为u 到v 的最短路径.求给定两个顶点之间的最短路径,称为最短路径问题. 算法:Dijkstra(标号法){}()*()*1()*()()1()*1.2./5.i r r i i i i ir i r r j j j j j r i r v l v v v l v r p l l v v v l v r l v v p r T V r ∞==-j ij r r 如果顶点与v 不相邻,则w =为顶点到顶点最短路径的权,如果顶点获得了标号,则称顶点在第步获得了标号(永久性标号)3.为顶点到顶点最短路径的权的上界,如果顶点获得了标号,则称顶点在第步获得了t 标号(临时性标号)4.P 已经获得标号为第步通过集P 为第步未通过集例:求图中v0与v5的最短路径(0)*000(0)0(1)*(0)(1)*1010100,{},T {},1,2,3,4,5{},min {},T T {}(2)T j jj i j i v T l P l w j l l l P P t ∈=======?=-0012345j i i i i 第步(r=0):v 获得p 标号v v ,v ,v ,v ,v ,v 获得t 标号第1步(r=1):(1)求下⼀个p 标号的顶点,将标在顶点v 处,表明顶点v 获得p 标号.修改通过集和未通过集:v v 修改中各顶点的标1(1)(0)(1)*(2)*(1)(2)*2121(2)(1)(2)*2min{,}{},min {},T T {}(2)T min{,}j jj iij i j iv T j j iij ll lw l l l P P t l l l w ∈=+==?=-=+i i i i 号:第2步(r=2):(1)求下⼀个p 标号的顶点,将标在顶点v 处,表明顶点v 获得p 标号.修改通过集和未通过集:v v 修改中各顶点的标号:2.关键路径问题,(){/,}(){/,}D D D V E v V v x x V v x E v v x x V x v E v +=<>∈Γ=∈∧<>∈Γ=∈∧<>∈-设为⼀个有向图,,则为的后继元集为的先继元集定义:PERT 图设D=是n 阶有向带权图1. D 是简单图2. D 中⽆环路3. 有⼀个顶点出度为0,称为发点;有⼀个顶点⼊度为0,称为收点4. 记边的权为wij,它常常表⽰时间1. 最早完成时间:⾃发点v1开始,沿最长路径(权)到达vi 所需时间,称为vi 的最早完成时间,记为TE (vi ),i=1,2,…,nj 1i i j ij v ()234567TE(v )=0,v (1)TE(v )={(v )+w },1,2,,max TE(v )=max{0+1}=1;TE(v )=max{0+2,1+0}=2;TE(v )=max{0+3,2+2}=4;TE(v )=max{1+3,4+4}=8;TE(v )=max{2+4,8+1}=9;TE(v )=max{1+4,2+D i v i TE i n -∈Γ≠=显然的最早完成时间按如下公式计算:813784}=6;TE(v )=max{6+6,9+1}=12;v v v v 关键路径:从发点到收点的⼀条最长路径,2. 最晚完成时间:在保证收点vn 的最早完成时间不增加的条件下,⾃发点v1最迟到达vi 所需时间,称为vi 的最晚完成时间,记为TL (vi ).j n n i i j ij v ()876543TL(v )=TL(v ),v ()TL(v )={(v )-w },1,2,,min TL(v )=12;TL(v )=min{12-6}=6;TL(v )=min{12-1}=11;TL(v )=min{11-1}=10;TL(v )=min{10-4}=6;TL(v )=min{6-2,11-4,6-4}=2;TL(D i v i n TL i n∈Γ≠=+显然的最晚完成时间按如下公式计算:21v )=min{2-0,10-3,6-4}=2;TL(v )=min{2-1,2-2,6-3}=0;3. 缓冲时间:TS(vi)=TL(vi)- TE(vi) TS(v1)= TS(v3)= TS(v7)= TS(v8)=0 TS(v2)=2-1=1; TS(v4)=6-4=2; TS(v5)=10-8=2; TS(v6)=11-9=2。
数据结构第7章图3有向无环图及其应用ppt课件
for(p=G.vertices[i].firstarc; p; p=p->nextarc){ k=p—>adivex;//对i号顶点的每个邻接点入度减1 if(!(--indegree[k])) Push(S,k); //若入度减为0,则入栈
§7.5 有向无环图及其应用
❖有向无环图
在工程实践中,一个工程项目往往由若干个子项 目组成,这些子项目间往往有多种关系:
①先后关系,即必须在一子项目完成后,才能开 始实施另一个子项目;
②子项目之间无次序要求,即两个子项目可以同 时进行,互不影响。
§7.5 有向无环图及其应用
❖两种常用的活动网络(Activity Network)
3
4 4^
4
2 1^ 3^
1^
s
0 V1 3 V4
5 V6
4
V2 1 V3 2 V5 4
indegree[0..5] 0 0 0 0 0 0 012345
最后输出的拓扑序列为:v6v1v3v2v4v5
§7.5 有向无环图及其应用
G.vertices[0] v1
3
2
G.vertices[1] v打2 印^G.vertices[4].data
1. 输入AOV网络。令 n 为顶点个数。 2. 在AOV网络中选一个没有直接前驱的顶点, 并输出之; 3. 从图中删去该顶点, 同时删去所有它发出的有向边; 4. 重复以上 2、3 步, 直到:
全部顶点均已输出,拓扑有序序列形成,拓扑排序完成 或者,图中还有未输出的顶点,但已跳出处理循环。这说 明图中还剩下一些顶点,它们都有直接前驱,再也找不到 没有前驱的顶点了。这时AOV网络中必定存在有向环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、何为有向无环图(DAG 图) 、何为有向无环图(
• 实例 E L F B F G G L Байду номын сангаас F
DAG图 图
B F G G L E F
B F G G
有向树
有向图(含环) 有向图(含环)
• 用途:描述工程项目或系统进行的工具 用途:
AOV 网络:定义结点为活动,有向边的指向表示活动执行的次序。 网络:定义结点为活动,有向边的指向表示活动执行的次序。 A B
AOE网络:定义结点为事件,有向边的指向表示事件的执行次序。单位是时间(时 网络:定义结点为事件,有向边的指向表示事件的执行次序。单位是时间( 网络 刻)。有向边定义为活动,它的权值定义为活动进行所需要的时间。 )。有向边定义为活动,它的权值定义为活动进行所需要的时间。 有向边定义为活动 A 10 B
•求事件的最早发生时间的程序实现 求事件的最早发生时间的程序实现 求事件的最早发生时间的
0 2 V2 1 1 1 0 V1 0 3 V3 5 1 0 V4 1 2 V2 1 1 0 V1 3 5 1 3 3、 2 V3 2 1 V4 5 5、 、 正向拓扑排序: 正向拓扑排序: V1 V2 V3 V4 2 V5 6 3、 2 2 0 V5 2 Status Topologicalsort( ALGraph G, Stack &T) ( ) { FindinDegree(G,indegree); ( , ) // 对各顶点求入度,建立入度为零的栈 S, 对各顶点求入度, , Initstack(T); );count = 0; ( ); V6 ve [ 0 .. G.vexnum - 1 ] = 0; while (!StackEmpty(S)) (! ( )) 0 { Pop(S,j);Push(T,j); ++count; ( ,) ( ,) for (p=G.vertices[i]. firstarc; p; p=p->nextarc); ) { k = p->adjnexr; if (!(- - indegree [ k ])) Push(S, k); ( )) ( ) if (ve[ j ]+ *( p->info)> ve[ k ] ) ( ) ve[ k ] = ve[ j ] + *( p->info); } ( ) 78 5、 、 } V6 } if (count < G.vexnum)return ERROR; ) else return OK; } // 栈 T 为求事件的最迟发生时间的时候用。 为求事件的最迟发生时间的时候用。
利用拓扑排序算法求事件结点的最早 发生时间的执行步骤: 发生时间的执行步骤: 1、设每个结点的最早发生时间为 , 、 设每个结点的最早发生时间为0, 将入度为零的结点进栈。 将入度为零的结点进栈。 2、将栈中入度为零的结点 取出,并 、将栈中入度为零的结点V取 压入另一栈, 压入另一栈 , 用于形成逆向拓扑排序 的序列。。 的序列。。 3、根据邻接表找到结点 的所有的邻 、根据邻接表找到结点V的所有的邻 接结点, 将结点V的最早发生时间 接结点 , 将结点 的最早发生时间 + 活动的权值 得到的和同邻接结点的原 最早发生时间进行比较; 最早发生时间进行比较 ; 如果该值大 则用该值取代原最早发生时间。 , 则用该值取代原最早发生时间 。 另 将这些邻接结点的入度减一。 外 , 将这些邻接结点的入度减一 。 如 果某一结点的入度变为零,则进栈。 果某一结点的入度变为零,则进栈。 4、反复执行 2、3;直至栈空为止。 、 、 ;直至栈空为止。
2 Vj 4 3 7 收点 Vn 10 10
Vl(Vj) = 取 10-2、10-4、10-3 、 、 、10-7的最小值 3; 的最小值 或 10 - 最长路径 7
由源点至汇 点
V1
2 Vu 3 Vv 9 Vw 82 Vx
9
由汇点至源点
1 2 3 6
2 1 2
Vu 8 Vv 8 Vw 5 Vx 收点 10 Vn 10
•算法 算法
(使用邻接表): 使用邻接表) 1 3 7 5 6
栈 indegree 0 1 1 1 2 1 3
算法的执行步骤: 算法的执行步骤: 1、用一个数组记录每个结点的入度。将入度为零的 、用一个数组记录每个结点的入度。 结点进栈。 结点进栈。 2、将栈中入度为零的结点V输出。 、将栈中入度为零的结点 输出 输出。 3、根据邻接表找到结点 的所有的邻接结点, 并将 、根据邻接表找到结点V的所有的邻接结点 的所有的邻接结点, 这些邻接结点的入度减一。 这些邻接结点的入度减一 。 如果某一结点的入度变 为零,则进栈。 为零,则进栈。
2 4
4、反复执行 2、3;直至栈空为止。 、 、 ;直至栈空为止。 ………………… 次序执行结束, 次序执行结束,如果输出结点数等于图的结点总数 则有向图有环,否则有向图有环。 ,则有向图有环,否则有向图有环。
0 1 2 3 4
0
0 1 2 3 4 5 6
1 2 3 4 5 6 7
null
1 3 4 6 3
序列:3、1、2、4、6、5、7 不合乎拓扑排序的要求 序列: 、 、 、 、 、 、 元素 3 的序号 1(后件)< 元素 1 (前件) 的序号 2 (后件) 前件) 1 3 7 5 6 2 4
1
3
2
7
5 6
4
1
3
2
4
6
5
7
可交换 可交换 可交换
•算法(使用邻接矩阵): 算法 使用邻接矩阵)
1
为了表示的方便, 为前件, 为后件。 为了表示的方便,令 ai 为前件,而 aj 为后件。前件的 小于后件。否则将不满足拓扑排序的定义。 序号一定要 小于后件。否则将不满足拓扑排序的定义。 • 用途:描述工程项目或系统进行的次序 用途:
AOV 网络:定义结点为活动,有向边的指向表示活动执行的次序。 定义结点为活动,有向边的指向表示活动执行的次序。
•实例:下述集合 M 代表课程的集合,其中,1代表数学, 2代 实例: 代表课程的集合,其中, 代表数学 代表数学, 代 实例 表程序设计, 代表离散数学 代表离散数学, 代表汇编程序设计 代表汇编程序设计, 表程序设计,3代表离散数学,4代表汇编程序设计, 5代表数据结构,6代表结构程序设计 7代表编译原理。 代表数据结构, 代表结构程序设计 代表编译原理 代表结构程序设计, 代表编译原理。 代表数据结构 课程学习的先后关系, 关系 R 课程学习的先后关系,如数学必须在离散数学之 前学习。要求排一张学习的先后次序表。 前学习。要求排一张学习的先后次序表。 1 3 7 5 6 2 4
第一个输出的结点:必须无前件。 第一个输出的结点:必须无前件。 后件:必须等到它的前件输出之后输出。 后件:必须等到它的前件输出之后输出。 无前件及后件的结点:任何时候都可输出。 无前件及后件的结点:任何时候都可输出。 序列: 、 、 、 、 、 、 序列:1、3、2、4、6、5、7 合乎拓扑排序的要求 序号 1、2、3、4、5、6、7 合乎拓扑排序的要求 、 、 、 、 、 、
null null
2 4 6
null
null null
5
null
5 6
null
•算法(使用邻接表): 算法 使用邻接表)
Status Topologicalsort( ALGraph G) ( ) 3 { findinDegree(G,indegree); ( , ) Initstack(S); ( ); 7 5 for (i = 0; i < G.vexnum; ++i) ) if (! Indegree [ i ])Push(S,i); ) ( ,) count = 0; while (! (!StackEmpty(S)) ( )) { Pop(S,i); Printf(i,vertices[ i ].data); ++count; ( ,) (, ) for (p=G.vertices[i]. firstarc; p; p=p->nextarc); ) { k = p->adjnexr; if (!(- - indegree [ k ])) Push(S, k); } ( )) ( ) } if (count < G.vexnum)return ERROR; ) else return OK; } // end
VJ
Vj 1
Ve(Vj) = Vj 的起始结点的最早发生 时间 + 各自的边的权值中的和的最 大值 88
Vl(Vj) = 取终止结点的最迟发生 时间 - 各自的边的权值的差的最 小值 3
• 实例:求事件结点的最早发生时间 实例:
0 V2 1 1 0 V1 3 0 V3 5 1 0 V4 1 2 V2 1 1 1 0 3 V1 5 V3 2 1 V4 5、 5 、 正向拓扑排序: 正向拓扑排序: V1 V2 V3 V4 V5 V6 3 3、 2 V6 7 5、 、 8 2 V5 3、 6 2 1 2 V6 0 0 2 V5 2
1
2
4 6
3、关键路径
•用途:估算工程项目完成时间 用途: 用途 AOE网络:定义 结点为事件,有向边的指向表示事件的 网络: 结点为事件, 网络 执行次序。单位是时间(时刻)。有向边定义为活动, )。有向边定义为活动 执行次序。单位是时间(时刻)。有向边定义为活动,它的 权值定义为活动进行所需要的时间。 权值定义为活动进行所需要的时间。 •术语: 术语: 术语 源点:表示整个工程的开始点,也称起点。 源点:表示整个工程的开始点,也称起点。 汇点:表示整个工程的结束点。 汇点:表示整个工程的结束点。 事件结点:单位时间,表示的是时刻。 事件结点:单位时间,表示的是时刻。 活动(有向边) 活动(有向边):它的权值定义为活动进行所需要的时 方向表示起始结点事件先发生, 间。方向表示起始结点事件先发生,而终止结点事件才能发 生。 10