- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HUNAN UNIVERSITY
课程实习报告
题 目: 教学计划编制问题
学生姓名 康小雪
学生学号 20090810310
专业班级 计科三班
指导老师 李晓鸿
完 成 日 期 2010-11-14
需求分析
1.本程序可以通过从键盘键入n门课程的编号建立合适的有向图,再通过用户键入先修课程的编号,为用户制定教学计划;
2.用户可以从键盘输入总课程数目,然后输入各门课对应的课程编号(长度小于等于3的字母串),再输入先修的课程和其后修的课程;
3.计算机通过根据顶点之间的关系从首个顶点开始对有向图图拓扑排序;
4.程序输出拓扑排序的序列 即教学计划修读课程的序列。
输入
概要设计
由于课程开设存在先决条件,先修的课程未修,那么后面的课程也不能修,这些先决条件就定义了课程之间的领先(优先)关系,于是,我们可以采用top排序的方法进行教学计划的制定。
在top排序中不直接输出课程信息,用队列实现课程序列的存储和输出。
抽象数据类型
ADT Graph{
数据对象:Subject是课程编号,是类型为char的二维数组
数据关系R:
点a,b∈Graph,若点a到b有一条边,则arcs[a][b]=1;否则=0;
基本操作P:
void Adj(Graph G,char *c1,char *c2)//建立邻接矩阵
int Locate(Graph G,char *c){//图G中查找元素c的位置
int Indegree(Graph G,int pos)//计算入度
void DeleteDegree(Graph G,int pos)//删除一条边
队列的抽象数据类型定义:
ADT Queue{
数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:Rl={ai-1,ai|ai-1,ai∈D,i=2,…,n}
约定其中ai端为队列头,an端为队列尾。
基本操作
void InitQueue(Queue Q){//初始化队列
void EnQueue(Queue Q,int e){//入队列
void DeQueue(Queue Q,int e){//出队列
bool EmptyQueue(Queue Q)//判断是否为空
void InitQueue(Queue Q)
操作结果:构造一个空队列Q
void EnQueue(Queue Q,Node e)
初始条件:队列Q已存在
操作结果:插入元素e为Q的新的队尾元素
void DeQueue(Queue Q,Node e)
初始条件:Q为非空队列
操作结果:删除Q的队头元素,并用e返回其值
}ADT Queue
算法的基本思想
在有向图中选一个没有前驱的顶点且输出之
从图中删除该顶点和所有以它为尾的弧
如图(a),途中v1和v6没有前驱,则可任选一个。假设先输出v6,zai删除v6及弧v6,v4,v6,v5之后,只有顶点v1没有前驱,则输出v1且删去v1及弧v1,v2、v1,v3和v1,v4,之后v3和v4都没有前驱。依次忒累,可从中任选一个继续进行。整个拓扑排序过程如图所示:
程序的流程
程序由四个模块组成:
(1)输入模块:从键盘键入课程编号和课程之间的先修关系
(2)建立Graph模块:构建符合课程关系的有向图
(3)排序模块:对有向图图进行top排序
(4)输出模块:输出top序列
三、详细设计
物理数据类型
typedef struct{
char Subject[MAX_VEX][5]; //顶点向量
int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
}Graph;
typedef struct{
int *base;
int front;
int rear;
}Queue;
算法的具体步骤
void CreateUDN(Graph G){//建立一个有向图
//输入课程总数
//输入每门课程的编号
//输入课程的先修关系
}
bool TopSort(Graph G)
{
//有向图G采用邻接表储存结构
//若G无回路,则输出G的顶点的一个top序列并
您可能关注的文档
最近下载
- 数学中考总复习.doc VIP
- 限制型心肌病超声诊断与评估.pptx
- _【课件】第四章 三角形 +问题解决策略:特殊化课件北师大版七年级数学下册.pptx VIP
- 中考数学总复习第一轮考点复习(重庆专版).pptx VIP
- 2025在线网课《信息检索与科技写作( 理大)》单元测试考核答案.pdf VIP
- 高频精选:京东快递员ai面试题及答案.doc VIP
- 新北师大版初中七年级数学下册《第四章三角形问题解决策略:特殊化(1)》教学课件.pptx VIP
- 河北 2023年农信社储蓄知识考试真题模拟汇编(共213题).doc VIP
- 河北 2023年农信社基础知识考试真题模拟汇编(共672题).doc VIP
- 四川省宜宾市2023-2024学年高一下学期期末学业质量监测语文试卷(原卷版+解析版).docx VIP
文档评论(0)