已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验五 教学计划的编制问题 HUNAN UNIVERSITY课程实验报告题目教学计划的编制问题学生姓名学生学号xx08010专业班级计算机科学与技术班完成日期 一、需求分析 (1)输入的形式和输入值的范围输入参数课程总数,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。 (2)输出的形式若根据输入条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。 (3)程序所能达到的功能按照用户的输入,给出每学期应学的课程。 (4)测试数据输入7(结点数)8(边的数量)结点1mat结点2che结点3eng结点4phy结点5bio结点6geo结点7边1mat che边2mat eng边3che eng边4che phy边5phy geo边6phy bio边7geo 边8eng geo输出mat che phy bioeng geo 二、概要设计抽象数据类型为实现上述功能,我们建立一个结点类,线性表类和图类。 结点的ADT如下数据类型字符串由于定义的结点是属于图的元素,故没有基本操作,里面所有的元素都用public存储。 线性表的ADT如下数据对象D=ai|ai?Node数据关系R1=|ai,ai+1?D基本操作void insert(int v,string ch)/插入元素图的ADT如下数据对象具有相同数据的结点类组成的顶点集数据关系R1=|w,v?Node,w,v表示w,v之间存在直接先修关系基本操作void pushVertex()/读入点void pushEdge()/读入边void topsort()/拓扑排序算法的基本思想先建立一个结点类,类中数据包括字符串、当前位置以及其指向的元素位置以及入度出度。 为了方便实现这个算法,图用线性表来存储,线性表中的元素为结点类。 将图中结点和边的关系输入这个图中,然后进行拓扑排序,若拓扑排序成功则输出正确的顺序,若不成功即有回路则输出提示语句。 程序流程程序由三个模块组成 (1)输入模块读入图的信息(顶点和边,用线性表进行存储)。 (2)处理模块topsort算法。 (3)输出模块将结果输出。 各程序模块之间的层次关系主函数会先调用输入模块确定图的结点和边,再循环调用Topsort算法,最后将结果提示给用户。 三、详细设计实现概要设计中的数据类型用整型存储用户的输入,并将相应数据存入Node类。 class Node/结点类public:string node;int position;/位置Node*next;bool visit;/是否被访问Node()visit=false;next=NULL;position=0;node=;class Line/线性表类public:int num;Node*head;Node*rear;Node*fence;Line()num=0;head=fence=rear=new Node();void insert(int v,string ch)/插入元素Node*current=new Node();current-node=ch;current-position=v;fence-next=current;fence=current;num+;class Graph/图类private:int numVertex;int numEdge;Line*line;public:Graph(int v,int e)numVertex=v;numEdge=e;line=new Linev;void pushVertex()/读入点string ch;for(int i=0;ich;linei.head-node=ch;linei.head-position=i;void pushEdge()/读入边string ch1,ch2;int pos1,pos2;for(int i=0;ich1ch2;for(int j=0;jnode=ch1)pos1=j;/找到该字母对应的位置if(linej.head-node=ch2)pos2=linej.head-position;break;linepos1.insert(pos2,ch2);Topsort算法先计算每个点的入度,保存在数组中。 找到第一个入度为0的点,将该点所连的各点的入度减一。 再在这些点中找入度为0的点。 如果找到,重复上述操作。 如果找不到,则跳出while循环,再搜索其他的点,看入度是否为0。 再重复上述操作,如果所有的入度为0的点都被寻找到,但个数少于输入顶点的个数,说明该图存在环。 void topsort()/拓扑排序int i;int*d=new intnumVertex;for(i=0;inext!=NULL)dp-next-position+;/计算每个点的入度p=p-next;int top=-1,m=0,j,k;for(i=0;inodenext!=NULL)k=p-next-position;dk-;/当起点被删除,时后面的点的入度-1if(dk=0)dk=top;top=k;p=p-next;coutnm;Graph G(n,m);G.pushVertex();G.pushEdge();G.topsort();system(pause);return0;算法的时空分析时间复杂度O(n),空间复杂度O(n);函数的调用关系图开始输入图的结点数和边数输入图中各个课程名称输入边关系拓扑排序结束输入和输出的格式输入7(结点数)8(边的数量)结点1mat结点2che结点3eng结点4phy结点5bio结点6geo结点7边1mat che边2mat eng边3che eng边4chephy边5phy geo边6phy bio边7geo边8eng geo输出mat chephy bioeng geo 四、测试结果 五、用户使用说明(可选) 1、本程序的运行环境为DOS操作系统,执行文件为教学计划编制.exe 2、运行程序时 (1)显示提示“请输入结点数和边数”,此时输入结点数和边数。 (2)数据输入完毕后,拓扑排序若成功则输出排序结果,若不成功则输出提示语句。 六、实验心得这次实验让我更加了解图的定义,对课堂内容更加了解。 七、附录#include#includeusing namespacestd;class Node/结点类public:string node;int position;/位置Node*next;bool visit;/是否被访问Node()visit=false;next=NULL;position=0;node=;class Line/线性表类public:int num;Node*head;Node*rear;Node*fence;Line()num=0;head=fence=rear=new Node();void insert(int v,string ch)/插入元素Node*current=new Node();current-node=ch;current-position=v;fence-next=current;fence=current;num+;class Graph/图类private:int numVertex;int numEdge;Line*line;public:Graph(int v,int e)numVertex=v;numEdge=e;line=new Linev;void pushVertex()/读入点string ch;for(int i=0;ich;linei.head-node=ch;linei.head-position=i;void pushEdge()/读入边string ch1,ch2;int pos1,pos2;for(int i=0;ich1ch2;for(int j=0;jnode=ch1)pos1=j;/找到该字母对应的位置if(linej.head-node=ch2)pos2=linej.head-position;break;linepos1.insert(pos2,ch2);void topsort()/拓扑排序int i;int*d=new intnumVertex;for(i=0;inext!=NULL)dp-next-position+;/计算每个点的入度p=p-next;int top=-1,m=0,j,k;f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东白云学院《有机化学Ⅰ(上)》2024-2025学年第一学期期末试卷
- 汕尾职业技术学院《商业策划与项目管理》2024-2025学年第一学期期末试卷
- 上海电力大学《教育技术与应用能力训练》2024-2025学年第一学期期末试卷
- 高血压急症护理要点与药物治疗方案
- 心脏外科冠心病冠脉搭桥术后护理管理手册
- 泌尿系结石预防指南及管理策略
- 骨折急救处理方案
- 放射性碘治疗甲状腺癌监测方案
- 急诊科脑卒中监护措施
- 2025年检验类之临床医学检验技术(师)每日一练试卷B卷含答案
- 医院洗衣房课件
- 从0到1开播指导抖音本地生活商家直播培训
- 2025年临港人才面试题目及答案
- 生产良率管理办法
- 消防员涉赌涉贷课件
- 旅行社安全生产工作会议记录
- 喂饭机器人设计
- 护士条例培训课件
- 2025年中国企业家健康绿皮书
- 水厂安全生产培训课件
- 确有专长针灸题库及答案
评论
0/150
提交评论