- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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。接着按上面的步骤一样进
您可能关注的文档
最近下载
- 2025年浙江机电职业技术学院单招职业适应性测试题库完整答案.docx VIP
- 2018年版《广东省安装工程定额说明及计算规则》C.4 电气设备安装工程(上).pdf
- 医疗器械质量记录管理制度.docx
- 规范《GB11586-1989-巴拿马运河导缆孔》.pdf
- 2025年党支部书记学习教育专题党课中央八项规定专题党课讲稿(严守中央八项规定精神,争做新时代合格党员;从中央八项规定精神看党员干部的责任与担当).docx VIP
- 2025年浙江机电职业技术学院单招职业适应性测试题库有答案.docx VIP
- 公开课必备大班绘本数学《一寸虫》.pptx VIP
- 某生产基地工程厂房施工组织设计方案.doc
- 《医疗器械产品技术要求编写指导原则》新旧对照表.pdf
- 20道浙商证券有限责任公司合规专员岗位常见面试问题含HR常问问题考察点及参考回答.docx VIP
文档评论(0)