- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用拓扑排序判断AOV网是否有回路
设计题目:在一个AOV网中判断是否有回路存在。
一、问题分析和任务定义:
1.1问题分析
1.1.1 AOV网:一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity)。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就是说,一个子工程的开始是以它的所有前序子工程的结束为先决条件的,但有些子工程没有先决条件,可以安排在任何时间开始。为了形象地反映出整个工程中各个子工程(活动)之间的先后关系,可用一个有向图来表示,图中的顶点代表活动(子工程),图中的有向边代表活动的先后关系,即有向边的起点的活动是终点活动的前序活动,只有当起点活动完成之后,其终点活动才能进行。通常,我们把这种顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activity On Vertex network),简称AOV网。
1.1.2 拓扑序列:在AOV网中,如果不存在回路,则所有活动可排列成一个线形序列,使得每个活动的所有前驱活动都排列在该活动的前面,则此序列叫做拓扑序列。
1.1.3 本程序主要用来输出一个拓扑序列,并判断AOV网是否有回路,当输出的拓扑序列的顶点数小与总的顶点数就说明此AOV网有回路,相等就说明此AOV网没有回路。
1.2任务分析和定义
1.2.1 在给定的AOV网中,得到一个包括全部顶点的拓扑序列,并输出此序列。
拓扑排序的基本思想:
(1) 在有向图中选一个没有前驱(即入度为0)的顶点且输出。
(2) 从图中删除该顶点和所有以它为尾的弧。
(3) 重复上述两步,直到全部顶点均已输出(最后得拓扑排序序列),或者当前图中不存在无前驱的顶点为止。
(4) 若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在回路,否则输出的顶点顺序即为一个拓扑序列。
用邻接表表示图时,拓扑排序算法时间复杂度为O(n+e)。
1.2.2 现以一个计算机专业的课表来演示这个过程:
表1、课表序列
课程代号 课程名称 先修课程
C1 高等数学 无
C2 程序设计基础 无
C3 离散数学 C1,C2
C4 数据结构 C3,C5
C5 算法语言 C2
C6 编译技术 C4,C5
C7 操作系统 C4,C9
C8 普通物理 C1
C9 计算机原理 C8
例如,假定一个计算机专业的学生必须完成上图所列出的全部课程。在这里,课程代表活动,学习一门课程就表示进行一项活动,学习每门课程的先决条件是学完它的全部先修课程。如学习《数据结构》课程就必须安排在学完它的两门先修课程《离散数学》和《算法语言》之后。学习《高等数学》课程则可以随时安排,因为它是基础课程,没有先修课。若用AOV网来表示这种课程安排的先后关系,则如图1所示。图中的每个顶点代表一门课程,每条有向边代表起点对应的课程是终点对应课程的先修课。图中的每个顶点代表一从图中可以清楚地看出各课程之间的先修和后续的关系。如课程C5的先修课为C2,后续课程为C4和C6。
图1、AOV网 图2、三个顶点的回路
1.2.3 测试用的数据
表2、测试数据
组别 第一组 第二组 顶点数和边数 9,11 9,11 边的信息 1,3 1,8 2,3 2,5 3,4 8,9
9,7 4,7 4,6 5,6 5 4 1,3 1,8 2,3 2,5 3,4 8,9
9,7 4,7 4,6 6,5 5,4 生成的邻接表 1 8 3
2 5 3
3 4
4 7 6
5 6 4
6
7
8 9
9 7 1 8 3
2 5 3
3 4
4 6 7
5 4
6 5
7
8 9
9 7 每个顶点的入度数 第1个点的入度为0
第2个点的入度为0
第3个点的入度为2
第4个点的入度为2
第5个点的入度为1
第6个点的入度为2
第7个点的入度为2
第8个点的入度为1
第9个点的入度为1 第1个点的入度为0
第2个点的入度为0
第3个点的入度为2
第4个点的入度为2
第5个点的入度为2
第6个点的入度为1
第
文档评论(0)