- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课题二 拓扑排序
2.1 问题的提出2.1 问题的提出
任务:编写函数实现图的拓扑排序。
程序所实现的功能:?建立对应的邻接表,对该图进行拓扑排序,并显示排序结果。
输入:
顶点数, 边数及各顶点信息(数据格式为整形) 输出:
拓扑排序结果。
2. 2 概要设计
1.拓扑排序是指由某个集合上的一个偏序得到该集合上的一个全序。更直观地讲,一个偏序是自反的、反对称的,用图表示时每个点都有环且只有单向边。拓扑排序的任务是在这个偏序上得到一个全序,即得到一个完成整个项目的各步骤的序列。
2.解决拓扑排序的方法如下:
(1)在有向图中选一个没有前驱的顶点且输出之。
(2)从图中删除该顶点和所有以它为尾的弧。
重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。后一种情况则说明有向图中存在环。具体的算法实现参照源程序。
3.构造邻接表图:typedef struct{
AdjList vertices;
int vexnum,arcnum;
}Graph;//邻接表图
4. 为了避免重复检测入度为零的顶点,源程序中设了一个栈,暂存所有入度为零的顶点:typedef struct stack{
int *base;
int *top;
int stacksize;
}sqstack;//栈的结构,存储图的顶点序号
2.3 流程图2.根据算法思想,画流程图如下:
开始设辅助数组indegree记录图的各顶点的入度值
开始
设辅助数组indegree记录图的各顶点的入度值,并将indegree数组各变量赋初值。
输入图的顶点数、边数
建立一个栈,存储图的顶点的序号
用邻接表法建图,并计算出indegree数组中各变量值
根据indegree数组将入度为0的顶点入栈
count对输出顶点计数0=count
栈不空
删除栈顶元素,赋给i
count++
将与第i个顶点链接的各顶点入度减1
输出第i个顶点值
顶点入度为0
顶点序号入栈
countG.vexnum
输出“拓扑排序成功”
输出“拓扑排序不成功”
结束
2.4 源代码
//采用尾插法创的邻接图
#includeiostream
using namespace std;
const int MAX=20;
const int STACK_INIT_SIZE=100;
const int ERROR=0;
typedef struct stack{
int *base;
int *top;
int stacksize;
}sqstack;//栈的结构,存储图的顶点序号
typedef struct lnode
{
int adjvex;
struct lnode *next;
}ArcNode;//弧结点
typedef struct node2
{
char data;
ArcNode *fristarc;
}VNode,AdjList[MAX];//顶点数组,fristarc指向与顶点邻接的第一条弧
typedef struct{
AdjList vertices;
int vexnum,arcnum;
}Graph;//邻接表图
void Initstack(sqstack s)
{
s.base=new int;
if(!s.base)
exit(0);
s.top=s.base;
s.stacksize= STACK_INIT_SIZE;
}
void Push(sqstack s,int e)
{
*s.top++=e;
}
int Emptystack(sqstack s)
{
if(s.base==s.top)
return 1;
else
return 0;
}
int Pop(sqstack s,int e)
{
if(s.base==s.top)
return ERROR;
e=*--s.top;
}
void CreatGraph(Graph G,int *indegree)
{
cout请输入图的顶点数和弧数(且顶点数不能超过MAX)endl;
cinG.vexnumG.arcnum;
cout请输入顶点值:endl;
for(int i=0;iG.vexnum;i++)//输入图的顶点
{
cinG.vertices[i].data;
G.vertices[i].fristarc=NULL;
indegree[i]=0
您可能关注的文档
- 数学新人教A版必修1教案:1.1.1《集合的含义与表示》.doc
- 数学等腰三角形难题.doc
- 数学高中选修课校本课程介绍.doc
- 数据库实用教程(第三版)第二章习题2.3ER图题答案.doc
- 数据库开发大全(呕心沥血之作).doc
- 数据库表结构说明.doc
- 数据异常(设备故障)、缺失报告.doc
- 数据挖掘与知识发现(8--模糊聚类).doc
- 数据结构(JAVA)课程设计.doc
- 数据结构中查找和排序算法实验报告.doc
- 《亿以上数的认识及读法》人教版小学数学四年级上册PPT课件(第1.3.1课时).pptx
- 《选用合适的长度单位》人教版小学数学二年级上册PPT课件(第1.4课时).pptx
- 《商是两位数的除法》人教版小学数学四年级上册PPT课件(第6.2.2课时).pptx
- 《循环小数》人教版小学数学五年级上册PPT课件(第3.5课时).pptx
- 《事件发生的可能性》人教版小学数学五年级上册PPT课件(第4.1课时).pptx
- 《速度、时间和路程》人教版小学数学四年级上册PPT课件(第4.2课时).pptx
- 《亿以内数的写法》人教版小学数学四年级上册PPT课件(第1.1.3课时).pptx
- 《亿以内数的读法》人教版小学数学四年级上册PPT课件(第1.1.2课时).pptx
- 《条形统计图》人教版小学数学四年级上册PPT课件(第7.1.1课时).pptx
- 《四舍五入法试商》人教版小学数学四年级上册PPT课件(第6.2.4课时).pptx
最近下载
- 内控系列之审计各循环访谈提纲.docx VIP
- 材料价格调差申请表(含计算公式).docx VIP
- 驾考科目一知识点.doc VIP
- 北师版九年级数学下册培优精品讲义(最新版;可直接打印).doc VIP
- 第9课发展全过程人民民主(课件+视频)(高教版2023·基础模块).pptx VIP
- 一般建厂流程图..doc
- 2025最新职业卫生健康考试题库(附含答案).pdf VIP
- 建筑装饰设计收费标准(2014年版)(完整).pdf VIP
- 2025-2030中国军事模拟行业市场发展趋势与前景展望战略研究报告.docx VIP
- 领取!吴蓬《104集芥子园谱视频教程》 《芥子园画谱》高清彩色电子版!.pdf VIP
原创力文档


文档评论(0)