教务排课表的二分图问题_第1页
教务排课表的二分图问题_第2页
教务排课表的二分图问题_第3页
教务排课表的二分图问题_第4页
教务排课表的二分图问题_第5页
免费预览已结束,剩余32页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、构课程设计东北大学计算机科学与工程学院计算机科学与技术专业1503班组长:邵威学号:2015434920154306组员:崔超学号:20154499组员:吴越学号:数据结构课程设计任务书(B类)题目:教务排课表的二分图问题问题描述:如果一个无向图的顶点集合可以分为两个互不相交的子集,并且图中每条边的两个顶点都属于两个不同的顶点集。则称该图为一个二分图。可以用一个二分图表示教师与课程的排课关系。假设每位教师可以胜任多门课程,但一个学期只能讲授一门课程,每学期的每门课程只需一位教师讲授。在二分图中,边数最多的匹配称为图的最大匹配。图的所有顶点都是某条匹配边的顶点,称这个匹配为完全匹配。设计要求:设

2、计基于二分图的匹配算法求解教务排课表程序。(1)采用STL的邻接矩阵结构图等数据结构。(2)应用基本运算,实现按照增广路径的算法求解教务排课表指导教师签字:年月日目录1课题概述11.1 课题任务11.2 课题原理12需求分析12.1 课题调研12.2 功能需求13方案设计13.1 总体功能设计13.2 数据结构设计23.3 函数原型设计23.4 用户界面设计34方案实现34.1 开发环境与工具34.2 个人设计实现(按组员分小节)4.2.1 邵威设计实现44.2.2 崔超设计实现74.2.3 吴越设计实现95测试与调试115.1 个人测试(按组员分小节)5.1.1 邵威测试115.1.2 崔超

3、测试145.1.3 吴越测试165.2 系统运行166课题总结206.1 课题性能分析206.2 课题评价与与团队协作206.3 个人设计小结(按组员分小节)206.3.1 .邵威设计小结206.3.2 崔超设计小结216.3.3 吴越设计小结217附录A课题任务分工22A-1课题程序设计分工22A-2课题报告分工238附录B源程序代码241课题概述1.1 课题任务设计基于二分图的匹配算法求解教务排课表程序。具体的设计任务如下:(1)采用STL的邻接矩阵结构图等数据结构。(2)应用基本运算,实现按照增广路径的算法求解教务排课表。1.2 课题原理针对本次课程设计的具体要求,我们设计了如下方案:我

4、们采用匈牙利算法求解教务排课表,采用大一下离散数学课上提供的算法,输出一种最大匹配。对于数据:我们用3个文件分别存储教师,课程及教师与课程关系。并在程序中设有增加,删除,输出信息的功能。对于教师和课程我们选择STL中vector动态数组来处理。对于教师与课程关系,我们选择二维数组存储。2需求分析2.1 课题调研为了完成本次课程设计任务,我们对二分图的知识点进行了复习,学习了求解二分图最大匹配问题的匈牙利算法。为本次课程设计任务的完成打下了良好的基础。2.2 功能需求此次设计任务,要求设计基于二分图的匹配算法求解教务排课表程序。一是求出最大匹配数,二是输出一种最大匹配。为了避免每次都需要输入的繁

5、琐,我们设计文件来存储,管理数据。3方案设计3.1 总体功能设计本次课程设计共分为四个主要功能:(1)文件读写(2)数据添加,删除,输出(3)求最大匹配数(4)输出一种最大匹配对于文件的操作,调用了C语言文件操作函数fwrite(),fread()。数据以二进制文件保存。对于数据添加删除,直接调用push_back(),erase()函数处理。对于求最大匹配数,我们选用匈牙利算法。对于输出一种最大匹配的算法如下图所示:二部图中的匹配求B和算法t设d=功岛>是二部图,置初值:匕=%上尸G=G°如票Gi是零图,则转束,得匕口否则在七中逅麻度最小的转点,不妨没这个结点是*JL与1和4

6、P排的一个结点为人取边佃加,E产EU(的b)从图丹中副小站点(即匕=匕/),得到图3。转到。,成对后期执行以上算法此外,我们还设计文件重置函数,使数据重置更加方便。3.2 数据结构设计本次课程设计主要使用了图,vector动态数组,具体的设计方案和操作过程将在个人报告中给出,在此不再赘述。3.3 函数原型设计intmain()vector<teacher>tea;vector<course>cou;printf("欢迎使用教务排课系统n");printf("正在导入数据库。n");ReadTeacher(tea);ReadCour

7、se(cou);ReadMatrix(mat);printf("导入数据库成功!n");printf("请按任意键进入主菜单n");system("pause");system("cls");while(1)printf("1.添加教师n");printf("2.添加课程n");printf("3.添加教师可任课课程n");-2-printf("4.输出教师信息n");printf("5.输出课程信息n");prin

8、tf("6.输出教师可任课课程n");printf("7.求最大匹配数n");printf("8.求一种最大匹配方案n");printf("9.清空数据库n");printf("10.删除教师信息:n");printf("11.删除课程信息:n");printf("12.关闭程序:n");printf("请输入正确的选项");inti=0;scanf("%d",&i);getchar();switch(i)c

9、ase1:AddTeacher(tea);break;case2:AddCourse(cou);break;case3:AddMatrix(mat,tea,cou);break;case4:PrintTeacher(tea);break;case5:PrintCourse(cou);break;case6:PrintMartix(mat,tea,cou);break;case7:Get_t_c(tea,cou);ANS();printf("%dn",ans);break;case8:Get_t_c(tea,cou);solve(tea,cou);break;case9:Re

10、set(mat,tea,cou);break;case10:DeleteTeacher(tea);memset(mat,0,sizeof(mat);break;case11:DeleteCourse(cou);memset(mat,0,sizeof(mat);break;case12:system("cls");printf("谢谢使用!");exit(0);break;default:printf("输入的选项不正确:");system("pause");system("cls");retur

11、n0;3.4用户界面设计运行时为DOS界面,通过输入选项选择操作。4方案实现4.1 开发环境与工具开发环境:Code:Blocks13.124.2 个人设计实现(按组员分小节)4.2.1 邵威设计实现(1)文件读取voidReadTeacher(vector<teacher>&tea)/读取教师文件tea.clear();FILE*Tea;if(Tea=fopen("teacher.txt","rb+")=NULL)/打开操作不成功printf("teacher.txtcannotbeopenedn");exit(

12、1);/结束程序的执行teachera;while(fread(&a,sizeof(structteacher),1,Tea)!=0)tea.push_back(a);fclose(Tea);voidReadCourse(vector<course>&cou)/读取课程文件cou.clear();FILE*Cou;if(Cou=fopen("course.txt","rb+")=NULL)/打开操作不成功printf("course.txtcannotbeopenedn");exit(1);/结束程序的执行

13、coursea;while(fread(&a,sizeof(structcourse),1,Cou)!=0)cou.push_back(a);fclose(Cou);voidReadMatrix(matrix&mat)/读取邻接矩阵FILE*Mat;if(Mat=fopen("matrix.txt","rb+")=NULL)/打开操作不成功printf("matrix.txtcannotbeopenedn");exit(1);/结束程序的执行fread(mat,sizeof(bool),N*N,Mat);fclose(

14、Mat);(2)文件写入voidWriteTeacher(vector<teacher>tea)/写入教师文件FILE*Tea;if(Tea=fopen("teacher.txt","wb+")=NULL)/打开操作不成功printf("teacher.txtcannotbeopenedn");-4-)vector<teacher>:iteratorit;for(it=tea.begin();it!=tea.end();it+)fwrite(&(*it).name),sizeof(structteach

15、er),1,Tea);)fclose(Tea);)voidWriteCourse(vector<course>cou)/写入课程文件FILE*Cou;if(Cou=fopen("course.txt","wb+")=NULL)/打开操作不成功printf("course.txtcannotbeopenedn");exit(1);/结束程序的执行)vector<course>:iteratorit;for(it=cou.begin();it!=cou.end();it+)fwrite(&(*it).nam

16、e),sizeof(structcourse),1,Cou);)fclose(Cou);)voidWriteMatrix(matrixmat)/写入邻接矩阵FILE*Mat;if(Mat=fopen("matrix.txt","wb+")=NULL)/printf("matrix.txtcannotbeopenedn"exit(1);/结束程序的执行)fwrite(mat,sizeof(bool),N*N,Mat);fclose(Mat);)(3)数据添加voidAddTeacher(vector<teacher>&

17、;tea)/intn=0;teachera;cout<<"请输入添加教师的个数:cin>>n;cout<<"请输入教师姓名:n"for(inti=1;i<=n;i+)cin>>;tea.push_back(a);)WriteTeacher(tea);)voidAddCourse(vector<course>&cou)/打开操作不成功添加教师(添加后要保存写入文件)添加课程(添加后要保存写入文件)intn=0;coursea;cout<<"请输入添加课程的个数

18、:"cin>>n;cout<<"请输入课程名称:n"for(inti=1;i<=n;i+)cin>>;cou.push_back(a);WriteCourse(cou);voidAddMatrix(matrix&mat,vector<teacher>tea,vector<course>cou)/添加关系(添力口后要保存写入文件)intn=0;cout<<"请输入添加关系的数目:"cin>>n;PrintTeacherPlus(tea);

19、PrintCoursePlus(cou);for(inti=1;i<=n;i+)inttn,m,tc;cout<<"请输入教师编号:";cin>>tn;cout<<"请输入该教师可任教的课数:";cin>>m;cout<<"请输入该教师所能任教的课程编号:";while(m-)cin>>tc;mattntc=true;WriteMatrix(mat);(4)输出其中一种最大匹配voidsolve(vector<teacher>tea,vector

20、<course>cou)/输出其中种最大匹配ANS();while(ans-)/输出其中一种最大匹配memset(p,0,sizeof(p);for(inti=1;i<=t;i+)/求度for(inta=1;a<=c;a+)if(matia=true)pi+;intMIN=0;for(inti=1;i<=t;i+)/初始化MINif(pi!=0)MIN=i;break;for(inti=1;i<=t;i+)/求最小度if(pMIN>pi&&pi!=0)MIN=i;for(inti=1;i<=c;i+)/处理最小度老师任"

21、<<<<"课"<<endl;删除该老师删除该课if(matMINi=true)cout<<teaMIN-1.name<<for(inta=1;a<=c;a+)/matMINa=false;for(inta=1;a<=t;a+)/matai=false;break;ReadMatrix(mat);4.2.2 崔超设计实现(1)匈牙利算法求最大匹配数boolFind(inti)/匈牙利算法for(intn=1;n<=t;n+)/为每位老师找一个课if(matin&&

22、;!usen)/如果老师找到课并且这个课没有其他老师任教usen=true;/标记此课有老师任教if(pn=0|Find(pn)/pi这位老师还没找到课或者能够找到他的课pn=i;/标记此老师有课returntrue;returnfalse;voidANS()/求最大匹配数ans=0;memset(p,0,sizeof(p);for(inti=1;i<=c;i+)memset(use,0,sizeof(use);if(Find(i)ans+;)voidGet_t_c(vector<teacher>tea,vector<course>cou)/获取教师数和课程数t=

23、tea.size();c=cou.size();)(2)数据删除voidDeleteTeacher(vector<teacher>&tea)/删除教师信息teachera;vector<teacher>:iteratorit=tea.begin();cout<<"请输入删除教师名字:n"cin>>;while(it!=tea.end()if(strcmp(,(*it).name)=0)it=tea.erase(it);)elseit+;)cout<<"教师删除成功:n&qu

24、ot;PrintTeacher(tea);WriteTeacher(tea);ReadTeacher(tea);)voidDeleteCourse(vector<course>&cou)/删除课程信息coursea;vector<course>:iteratorit=cou.begin();cout<<"请输入删除课程名称:n"cin>>;while(it!=cou.end()if(strcmp(,(*it).name)=0)it=cou.erase(it);)elseit+;)cout<

25、<"教师删除成功:n"PrintCourse(cou);WriteCourse(cou);ReadCourse(cou);4.2.3 吴越设计实现(1)数据输出voidPrintTeacher(vector<teacher>tea)/输出教师信息cout<<"教师名单如下:"<<endl;for(inti=0;i<tea.size();i+)cout<<<<endl;)voidPrintCourse(vector<course>cou)/输出课程信息co

26、ut<<"课程名单如下:"<<endl;for(inti=0;i<cou.size();i+)cout<<<<endl;)voidPrintMartix(matrixmat,vector<teacher>tea,vector<course>cou)/输出令B接矩阵for(inti=0;i<N;i+)for(intn=0;n<N;n+)if(matin=true)cout<<<<"老师可以任"<&l

27、t;<<"课"<<endl;)voidPrintTeacherPlus(vector<teacher>tea)/输出教师信息和编号cout<<"教师名单及编号如下:"<<endl;for(inti=0;i<tea.size();i+)cout<<"编号:"<<i+1<<""<<"姓名"<<<<endl;)voidPrin

28、tCoursePlus(vector<course>cou)/输出课程信息和编号cout<<"课程名单及编号如下:"<<endl;for(inti=0;i<cou.size();i+)cout<<"编号:"<<i+1<<""<<"名称"<<<<endl;)(2)文件重置voidReset(matrix&mat,vector<teacher>&tea,vect

29、or<course>&cou)/重置文件FILE*Tea;if(Tea=fopen("teacher.txt","w+")=NULL)/打开操作不成功printf("teacher.txtcannotbeopenedn");-9-)fclose(Tea);FILE*Cou;打开操作不成功打开操作不成功if(Cou=fopen("course.txt","w+")=NULL)/printf("course.txtcannotbeopenedn");exit(

30、1);/结束程序的执行)fclose(Cou);FILE*Mat;if(Mat=fopen("matrix.txt","w+")=NULL)/printf("matrix.txtcannotbeopenedn");exit(1);/结束程序的执行)fclose(Mat);ReadTeacher(tea);ReadCourse(cou);ReadMatrix(mat);)(3)主函数intmain()vector<teacher>tea;vector<course>cou;printf("欢迎使用教务排

31、课系统n");printf("正在导入数据库。n");ReadTeacher(tea);ReadCourse(cou);ReadMatrix(mat);printf("导入数据库成功!n");printf("请按任意键进入主菜单n");system("pause");system("cls");while(1)printf("1.添加教师n");printf("2.添加课程n");printf("3.添加教师可任课课程n");

32、printf("4.输出教师信息n");printf("5.输出课程信息n");printf("6.输出教师可任课课程n");printf("7.求最大匹配数n");printf("8.求一种最大匹配方案n");printf("9.清空数据库n");printf("10.删除教师信息:n");-10-printf("11.删除课程信息:n");printf("12.关闭程序:n");printf("请输入正

33、确的选项");inti=0;scanf("%d",&i);getchar();switch(i)case1:AddTeacher(tea);break;case2:AddCourse(cou);break;case3:AddMatrix(mat,tea,cou);break;case4:PrintTeacher(tea);break;case5:PrintCourse(cou);break;case6:PrintMartix(mat,tea,cou);break;case7:Get_t_c(tea,cou);ANS();printf("%dn&q

34、uot;,ans);break;case8:Get_t_c(tea,cou);solve(tea,cou);break;case9:Reset(mat,tea,cou);break;case10:DeleteTeacher(tea);memset(mat,0,sizeof(mat);break;case11:DeleteCourse(cou);memset(mat,0,sizeof(mat);break;case12:system("cls");printf("谢谢使用!");exit(0);break;default:printf("输入的选

35、项不正确:");system("pause");system("cls");return0;5测试与调试5.1 个人测试(按组员分小节)5.1.1 邵威测试测试内容:输出一种最大匹配#include<stdio.h>#include<string.h>#include<iostream>usingnamespacestd;/测试序歹U552253234215312512#defineN205#defineSIZEt50;#defineSIZEc50;intn,m,x,u,ans;booluseN;intpN;

36、-11-boollineNN;typedefstructteachercharname32;teacher;typedefstructcoursecharname32;course;boolfind(intx)/匈牙利算法for(inti=1;i<=m;i+)为每位老师找一个课if(linexi&&!usei)/如果老师找到课并且这个课没有其他老师任教usei=true;/标记此课有老师任教if(pi=0|find(pi)/pi这位老师还没找到课或者能够找到他的课pi=x;/标记此老师有课returntrue;returnfalse;voidsolve()/输出其中一种最

37、大匹配while(ans-)/输出其中一种最大匹配memset(p,0,sizeof(p);for(inti=1;i<=n;i+)/求度for(inta=1;a<=m;a+)if(lineia=true)pi+;intMIN=0;for(inti=1;i<=n;i+)/初始化MINif(pi!=0)MIN=i;break;for(inti=1;i<=n;i+)/求最小度if(pMIN>pi&&pi!=0)MIN=i;for(inti=1;i<=m;i+)/处理最小度if(lineMINi=true)printf("第d老师任第%d门

38、课n",MIN,i);for(inta=1;a<=m;a+)/删除该老师lineMINa=false;for(inta=1;a<=n;a+)/删除该课-12-)break;)voidANS()/求最大匹配数for(inti=1;i<=n;i+)memset(use,0,sizeof(use);if(find(i)ans+;)intmain()printf("请输入老师人数和课程的数目");scanf("%d%d”,&n,&m);/n老师,m课ans=0;memset(line,0,sizeof(line);memset(

39、p,0,sizeof(p);printf("按顺序输入老师能上的课程n");for(inti=1;i<=n;i+)/构建邻接矩阵i表示第i位老师u表示第i门课scanf("%d",&x);while(x-)scanf("%d",&u);lineiu=true;)ANS();solve();return0;)-13-5.1.2崔超测试测试内容:匈牙利算法输出最大匹配数#include<stdio.h>#include<string.h>#include<iostream>usin

40、gnamespacestd;测试序歹U552253234215312512#defineN205#defineSIZEt50;#defineSIZEc50;intn,m,x,u,ans;booluseN;intpN;boollineNN;typedefstructteachercharname32;teacher;typedefstructcoursecharname32;course;boolfind(intx)/匈牙利算法for(inti=1;i<=m;i+)为每位老师找一个课if(linexi&&!usei)/如果老师找到课并且这个课没有其他老师任教usei=tru

41、e;/标记此课有老师任教if(pi=0|find(pi)/pi这位老师还没找到课或者能够找到他的课pi=x;/标记此老师有课returntrue;-14-)returnfalse;)voidANS()/求最大匹配数for(inti=1;i<=n;i+)memset(use,0,sizeof(use);if(find(i)ans+;printf("%dn",ans);intmain()printf("请输入老师人数和课程的数目scanf("%d%d”,&n,&m);/n老师,");m课ans=0;memset(line,0,

42、sizeof(line);memset(p,0,sizeof(p);printf("按顺序输入老师能上的课程n");for(inti=1;i<=n;i+)/构建邻接矩阵i表示第i位老师u表示第i门课scanf("%d",&x);while(x-)scanf("%d",&u);lineiu=true;ANS();return0;-15-5.1.3吴越测试吴越设计部分的测试将在系统运行中给出,在此不再赘述。5.2系统运行初始化界面:王采单界面:|.添加救蛇2添加课程3,潘加载而可任课课程4 .输出教近信息5 .SHi

43、Wfs.fr民输巴教防可任课课程7 .求最大匹配数出事一种是七匹配方案9 .清空数据年刘一切除教师信息:口剂除课程信息112.关闭程序:情翰人正碑的选项.:功能一:添加教师(添加课程,教师可任课课程类似,不逐一演示)-16-C:Uiers69055.DESKTOP-VCJN723DeiktDpi5:1Si.tBSS.exeL诙加软朋2 .承加课程a.添加敦昨可仔课课程4 .输出救帏信息X输出课程信息6 .览出按面可任勰课程7 .求最大匹配酊8 .求一种最大匹配方案9 .清空数据室m删除教师信息:|删除课程宿息*12.关闭程序:请输入正确的选项1小王请按任芭神好缴一.一请晓人添加鼓时的4效:1请

44、输人教师姓名:功能二:输出教师信息(输出课程,教师可任课课程类似,不逐一演示)C2UHters69O55.DESKT0P-VOH72SDeslctopS®ftHlBi*.exer添加散冒2.语加课程3,添加教师可任课课程4 .锄出既师信息5,输出课程信息6 .过出颔师可任课课程7 .求总大匹配数8 .求一科最大四配方案9 .清空敞据库10,删除教师信息:11.胆除课程信息:W关用程序:请*入正满的选项4教师名蔗如X小三小七小戛小明功能三:求最大匹配数-17-功能四:求一种最大匹配方案功能六:清空数据库-18-功能七:删除教师(删除课程类似,不逐一演示)功能八:退出-19-JUwrs5

45、55DESiaOP-VCJN?23DKktQpiftiBffi.rBfert3J口/Lf:rq-ProcessretiLmed0(0x0)eKeCiitibritime:2.149后Pre-ssanykeytocontinue.6课题总结6.1 课题性能分析本次课程设计,我们经过详细的前期调研和问题分析,按照题目要求,图作为基本的数据结构,利用匈牙利算法求解最大匹配数,输出一种最大匹配匈牙利算法时间复杂度:O(n2)空间复杂度:O(1)输出一种最大匹配时间复杂度:O(n2)空间复杂度:O(1)6.2 课题评价与与团队协作本次课程设计由三名同学共同完成,虽然系统仍然有这样那样的问题和不足,但更重

46、要的是在这个过程中大家所学到的一切。在整个设计和完成的过程中,每位组员都十分认真对待自己负责的部分,时刻保持与其他组员进行交流,就完成课程设计任务中出现的问题和瑕疵进行改正和优化。小组中人人各司其职,从前期算法讨论到最后的调试优化,每个人都秉持互相尊重,精诚合作的宗旨,使本次课程设计的任务圆满顺利完成。6.3 个人设计小结(按组员分小节)6.3.1 邵威设计小结我主要输出一种最大匹配的功能,为了实现这个功能,我翻阅了离散数学(下)的课本和课件,将老师所授的算法予以实现。最大的收获就是能够把其他学科的知识化为代码,为我们所用,来解决生活中的问题。通过这次实验,我复习了C语言文件函数的使用,学习了

47、调用STL中的vector动态数组来处理问题,对STL了使用有了深刻的认识和体会,此外我还深切的体会到团队合作的重要性,在实践过程中不仅要完成好自己的任务,也要积极配合团队。在应用的时候发现自己的不足,这次课程设计不同于平时练习,平时练习都是小程序虽然知道模块化编程的好处-20-但没有真正的去实践,所以这次实验让我体会很深。6.3.2 崔超设计小结此次课程设计,我主要负责对教师课程及关系矩阵的删除操作及部分文件的读写,我们采用了C+标准库中的vector容器,首先我们输入变量并while循环,通过迭代器找到所在位置,利用STL中vector的删除函数将其删除,然后将数组中被删除元素后元素前移一

48、个单位,此次我们决定用"+rb"方式对文件进行读写,由此创建一个二进制文件,通过字符大小进行输入输出较为方便。通过这个课程设计,我对类的使用进行了复习,加深了掌握程度,同时也用了链表这一数据结构,对其概念有了更深刻的认识,也熟练了自己对数据结构的使用。这一部分由自己独立完成,切实锻炼了自己的编程能力,并且也得到同学对一些错误和细节上的帮忙修改订正,和对我的不断鼓励,在此非常感谢他们。6.3.3 吴越设计小结由于我在小组分工中负责A类的可视化部分,所以只结合Vector模板类,编写了输出教师、课程以及教师与课程关系的函数,然后由于数据是存储在外部文件当中,因而同时负责了编写重

49、置文件的函数.本次实验没有采用可视化,所以我还简单地对主函数界面进行了美化,使其功能划分更加清晰便于操作.通过此次课程设计,我对数据结构知识有了更加熟练的应用,对模板类有了更加深刻的认识,深深体会到了它的便利性.我认为在实际的上机操作过程中,不仅让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次课程设计任务,可以提高我分析设计的能力和编程能力,为后续的学习打好基础。以后我会努力学好每门专业课,让自己拥有更多的知识,解决更多问题。-21-附录AA-1课题程序设计分工课题程序设计分工学号姓名程序设计函数原型、类功能说明20154349邵威typedefstructte

50、acher/教师类型typedefstructcourse/课程类型typedefboolmatrixNN;/关系类型数据存储结构voidReadTeacher(vector<teacher>&tea);voidReadCourse(vector<course>&cou);voidReadMatrix(matrix&mat);文件读取voidWriteTeacher(vector<teacher>tea);voidWriteCourse(vector<course>cou);voidWriteMatrix(matrixma

51、t);文件写入voidAddTeacher(vector<teacher>&tea);voidAddCourse(vector<course>&cou);VoidAddMatrix(matrix&mat,vector<teacher>tea,vector<course>cou);数据添加voidsolve(vector<teacher>tea,vector<course>cou);输出一种最大匹配20154499崔超voidDeleteTeacher(vector<teacher>&am

52、p;tea);voidDeleteCourse(vector<course>&cou);数据删除voidGet_t_c(vector<teacher>tea,vector<course>cou);boolFind(inti);voidANS();匈牙利算法求最大匹配数20154306吴越voidPrintTeacher(vector<teacher>tea);voidPrintCourse(vector<course>cou);VoidPrintMartix(matrixmat,vector<teacher>tea

53、,vector<course>cou);VoidPrintTeacherPlus(vector<teacher>tea);voidPrintCoursePlus(vector<course>cou);数据输出voidReset(matrix&mat,vector<teacher>&tea,vector<course>&cou);文件重置intmain();主函数设计-22-工作量比重:邵威:崔超:吴越=4:3:3A-2课题报告分工课题报告分工章节内容完成人1课题概述1.1课题任务邵威1.2课题原理2需求分析2.

54、1课题调研邵威2.2功能需求3方某设计3.1总体功能设计邵威3.2数据结构设计3.3函数原型设计3.4用户界面设计4方案实现4.1开发环境与工具邵威4.2个人设计实现4.2.1邵威4.2.2崔超4.2.3吴越5测试与调试5.1个人测试5.1.1邵威5.1.2崔超5.1.3吴越5.2系统运行吴越6课题总结6.1课题性能分析邵威6.2课题评价与团队协作邵威6.3个人设计小结6.3.1邵威6.3.2崔超6.3.3吴越-23-附录B源程序代码/教务排课表的二分图问题#include<string.h>#include<iostream>#include<stdio.h&g

55、t;#include<stdlib.h>#include<vector>#defineN200usingnamespacestd;typedefstructteachercharname32;teacher;typedefstructcoursecharname32;course;typedefboolmatrixNN;matrixmat;/全局变量邻接矩阵intt,c,ans;booluseN;intpN;voidReadTeacher(vector<teacher>&tea)读取教师文件tea.clear();FILE*Tea;if(Tea=fo

56、pen("teacher.txt","rb+")=NULL)/打开操作不成功printf("teacher.txtcannotbeopenedn");exit(1);/结束程序的执行teachera;while(fread(&a,sizeof(structteacher),1,Tea)!=0)tea.push_back(a);fclose(Tea);voidReadCourse(vector<course>&cou)/读取课程文件cou.clear();FILE*Cou;if(Cou=fopen("

57、;course.txt","rb+")=NULL)/打开操作不成功printf("course.txtcannotbeopenedn");exit(1);/结束程序的执行coursea;while(fread(&a,sizeof(structcourse),1,Cou)!=0)-24-cou.push_back(a);)fclose(Cou);)voidReadMatrix(matrix&mat)/读取邻接矩阵FILE*Mat;if(Mat=fopen("matrix.txt","rb+"

58、)=NULL)/打开操作不成功printf("matrix.txtcannotbeopenedn");exit(1);/结束程序的执行)fread(mat,sizeof(bool),N*N,Mat);fclose(Mat);)voidWriteTeacher(vector<teacher>tea)/写入教师文件FILE*Tea;if(Tea=fopen("teacher.txt","wb+")=NULL)/打开操作不成功printf("teacher.txtcannotbeopenedn");exit(

59、1);/结束程序的执行)vector<teacher>:iteratorit;for(it=tea.begin();it!=tea.end();it+)fwrite(&(*it).name),sizeof(structteacher),1,Tea);)fclose(Tea);)voidWriteCourse(vector<course>cou)/写入课程文件FILE*Cou;if(Cou=fopen("course.txt","wb+")=NULL)/打开操作不成功printf("course.txtcannotbeopenedn");exit(1);/结束程序的执行)vect

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论