(16)有向无环图及其应用分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vertex
adjvexnextadj firstedge
0
v1
v2
1
3
v4
v3
2
5
4
v5
v6
另外增设一个存放各顶点的入度值的一维数组indegree:
indegree[0..5] 0 0 2 1 1 2 2 3 3 4 0 5
10
二、拓扑排序
indegree一维数组初值的程序: 4.求 算法说明:为了使说明过程简单起见,我们以下 FindInDegree(ALGraph G,indegree[0..G.vexnum-1]){ 图为例:
C6 C11
6
二、拓扑排序
3.方法:
C4 C5 C2 C1 C3 C7
C12 C9 C10 C8
C6 C11
拓扑序列:C1 C2 C3 C4 C5 C7 C9 C10 C11 C6 C12 C8
7
二、拓扑排序
3.方法: 注意1 :从某种意义下来说,拓扑排序的结果是不 唯一的。 注意2 :这种以顶点表示活动的有向无环图称为活动 在顶点的网,简称AOV(Activity On Vertex Network) 网。
0
v1
v2
1
s
3
v4 v3
0 indegree[0..5] }//FindInDegree 0 2 1 1 2 2 3 3 4 0 5
11
二、拓扑排序
拓扑排序算法思想: 4.算法说明:为了使说明过程简单起见,我们以下 ①设一个栈S,所有入度为0的顶点 图为例: 的序号进栈。如0,5 进栈。 0 1 G. adjlist[0] v1 3 2 1 ^ v1 v2 count=0(打印顶点个数计数器)。 Gadjlist [1] v2 ^ ②当栈S不空时,出栈一个元素并打 2 3 印相应顶点的值; count 加 1。 G. adjlist[2] v3 4 1 ^ v3 v4 该顶点的所有邻接点的入度减 1, G. adjlist [3] v4 4 ^ 减1后所有入度为0的顶点的序号进栈。 4 Gadjlist [4] v5 ^ 5 ③重复第二步,直至栈空时转④。 v6 v5 G. adjlist[5] v6 4 3 ^ ④若count=G.vexnum,则拓扑排序成 功;否则图中必有环路,拓扑排序失 另外增设一个存放各顶点的入度值的一维数组indegree: 败。 indegree[0..5] 0 2 1 2 3 0
0 1 2 3 4 5
12
二、拓扑排序
4.算法说明:为了使பைடு நூலகம்明过程简单起见,我们以下 图为例:
G. adjlist[0] G. adjlist[1] G. adjlist[2] G. adjlist[3] G. adjlist[4] Gadjlist [5] v1 v2 ^ v3 v4 v5 ^ v6 4 3 ^ 4 4 ^ 1 ^ 3 2 1 ^
C3,C6 无 C9
C11
C12
普通物理
数值分析
C9
C9,C10,C1
3
二、拓扑排序
2.拓扑排序:
C4 C5 C2 C1 C3 C7
C12 C9 C10 C8
C6 C11
偏序是指集合中仅有部分元素可比较大小(或先后);
4 全序是指集合中所有元素均可比较大小(或先后)。
二、拓扑排序
2.拓扑排序:
C4 C5 C2 C1 C3 C7
9
二、拓扑排序
4.算法说明:为了使说明过程简单起见,我们以下 图为例:
G.adjlist[0] G.adjlist[1] G.adjlist[2] G.adjlist[3] G.adjlist[4] G. adjlist[5] v1 v2 ^ v3 v4 v5 ^ v6 4 3 ^ 4 4 ^ 1 ^ 3 2 1 ^
有向无环图 及其应用
1
一、定义
一个无环的有向图称为有向无环图,简写为 DAG(directed acycline graph)。 与有向二叉树相比,有向无环图是更一般的特 殊有向图。 实例:
有向树
有向无环图
有向图
有向无环图的一个简单应用: 用有向无环图描述 2 算术表达式。
二、拓扑排序
1.引例:现有计算机课程12门,如下表所示:
课程编号
C4
课程名称
C2
C5
先修课程
C1
C1
程序设计基础
离散数学 数据结构 C3
无
C1 C1,C2
C7
C2 C3
C4
C5
C9
汇编语言
语言的设计和分析 C12 计算机组成原理
C10
C1
C3,C4 C11 C5,C3
C6 C8
C6 C7 C8 C9 C10
C11
编译原理 操作系统原理 高等数学 线性代数
for(i=0;i<G.vexnum;++i) indegree[0..G.vexnum-1]=0; 0 1 G. adjlist[0] v1 3 2 1 ^ v1 v2 for(i=0;i<G.vexnum;++i){ G. adjlist[1] v2 ^ p=G. adjlist[i].firstedge; 2 3 G. adjlist [2] v3 4 1 ^ while (p){ v3 v4 G. adjlist[3]k=p->adjvex; v4 4 ^ 4 G. adjlist[4]++indegree[k]; v5 ^ 5 v6 v5 p=p->nextadj; G. adjlist[5] v6 4 3 ^ } 另外增设一个存放各顶点的入度值的一维数组 indegree: }
拓扑序列:C1 C2 C3 C4 C5 C7 C9 C10 C11 C6 C12 C8
8
二、拓扑排序
3.方法: 注意1 :从某种意义下来说,拓扑排序的结果是不 唯一的。 注意2 :这种以顶点表示活动的有向无环图称为活动 在顶点的网,简称AOV(Activity On Vertex Network) 网。 注意3 :当有向图中包含有向环路时,拓扑排序算法 结束时图中还有若干顶点没有被输出(即有向环路 中的所有顶点没有参加排序)。
C12 C9 C10 C8
C6 C11
拓扑排序是指将一个偏序关系转化为全序关系的过程 的特殊操作。 5
二、拓扑排序
3.方法: ①在有向图中选择一个没有前驱(即 入度为0)的顶点并输出之。
C2 C1 C4 C5
②在有向图中删除刚刚输出的顶点及 C3 所有以该顶点为尾的弧。
C12
C7
C9
③图中若不再有入度为 0的顶点,则 C8 C10 结束;否则转①。