网站大量收购独家精品文档,联系QQ:2885784924

拓扑排序实习报告..doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
拓扑排序实习报告.

数据结构 课程设计实习报告 题目: 拓扑排序 班级: 学号: 姓名: 2008年6月23日至6月27日 实习报告 [题目] 拓扑排序。 建立有向无环图,并输出拓扑的序列。 [基本要求] 输入顶点数和边,输出图的拓扑的序列。 一.问题分析及任务定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若u,v ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。 拓扑排序演示: 注意: ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均是从左指向右的。 ②若图中存在有向环,则不可能使顶点满足拓扑次序。 ③一个DAG的拓扑序列通常表示某种方案切实可行。 【例】一本书的作者将书本中的各章节学习作为顶点,各章节的先学后修关系作为边,构成一个有向图。按有向图的拓扑次序安排章节,才能保证读者在学习某章节时,其预备知识已在前面的章节里介绍过。 ④一个DAG可能有多个拓扑序列。 【例】对图G9进行拓扑排序,至少可得到如下的两个(实际远不止两个)拓扑序列:C0,C1,C2,C4,C3,C5,C7, C8,C6和C0,C7,C9,C1,C4,C2,C3,C6,C5。 ⑤当有向图中存在有向环时,拓扑序列不存在 【例】下面(a)图中的有向环重排后如(b)所示,有向边v3,vl和其它边反向。若有向图被用来表示某项工程实施方案或某项工作计划,则找不到该图的拓扑序列(即含有向环),就意味着该方案或计划是不可行的。 二.概要设计和数据结构选择 (1)存储结构:采用链接表来存储图中的各条边的关系,链接表采用结点和链接点,其结构体分别如下所示: typedef struct edgenode //邻接点 { int adjvex;//邻接点的序号 struct edgenode *next; }Vertex; typedef struct //结点 { int data; //结点的入度 Vertex *link; }Adjlist; Typedef struct { Adjlist vertices[MAXVEX];//邻接表表中结点数组定义 int vexnum,edgenum;//vexnum表示顶点数,edgenum表示边数 }ALGraph; 定义各个结点: typedef struct vexnode adjlist[MAXVEX]; 建立邻接表 例如一个有向图的结构为: 其邻接表的形式如下: 第一列的数为各顶点的原始度数。 (2)主要算法基本思想。 输出拓扑序列:先输出入度为0的顶点,再改变其他顶点的入度;循环以上步骤。 具体实现方法:初始r为0(r为每次对全部结点搜索后度数为0的结点个数),对邻接表的各结点进行搜索,当结点的入度不为0,使r加1;当结点的入度为0,使此结点的度数减1,输出此结点的值,m加1(m为输出顶点的个数),再把此结点的各个邻接点的入度减1。接着按上面的步骤一样进行,直到r==n,即结点的入度都不为0。最后如果mn,即输出的个数少于顶点数则说明网中有环。 (3) 设计表示法 (1) 函数调用关系如图所示。 (2) 函数接口说明。 (1.void LianJieBiao(adjlist g,int n,int e) /*建立顶点的链接表,先初始化各结点的度数为0,尾为空,再提示输入相关的一条边的两个顶点,要是输入的数字有误提示重新输入,把这条边的终点的结点的度数加1,再把这条边的终点的结点链结到起点上,重复操作。最后打印输出各顶点的起始度数。*/ (2.void BianLi(adjlist g,int n) /*通过已建立的链接表来遍历图,利用for()语句把每个结点的链结点打印输出,以此来遍历图,每行最后用^表示结束。*/ (3. void TuoPuPaiXv(adjlist adj,int n) /*输出拓扑排序的结果, 具体实现方法:初始r为0(r为每次对全部结点搜索后度数为0的结点个数),对链接表的各结点进行搜索,当结点的入度不为0,使r加1;当结点的入度为0,使此结点的度数减1,输出此结点的值,m加1(m为输出顶点的个数),再把此结点的各个链接点的入度减1。接着按上面的步骤一样进

文档评论(0)

wuyuetian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档