教务排课表的二分图问题_第1页
教务排课表的二分图问题_第2页
教务排课表的二分图问题_第3页
教务排课表的二分图问题_第4页
教务排课表的二分图问题_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

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

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 测

3、试与调试115.1 个人测试(按组员分小节)5.1.1 邵威测试115.1.2 崔超测试145.1.3 吴越测试165.2 系统运行166 课题总结206.1 课题性能分析206.2 课题评价与与团队协作206.3 个人设计小结(按组员分小节)20精品文档6.3.1 .邵威设计小结 206.3.2 崔超设计小结 216.3.3 吴越设计小结 217 附录 A 课题任务分工22A-1 课题程序设计分工22A-2 课题报告分工238 附录 B 源程序代码24- # - 欢迎下载。精品文档1课题概述1.1 课题任务设计基于二分图的匹配算法求解教务排课表程序。具体的设计任务如下:(1)采用STL的邻接

4、矩阵结构图等数据结构。(2)应用基本运算,实现按照增广路径的算法求解教务排课表。1.2 课题原理针对本次课程设计的具体要求,我们设计了如下方案:我们采用匈牙利算法求解教务排 课表,采用大一下离散数学课上提供的算法,输出一种最大匹配。对于数据:我们用3个文件分别存储教师,课程及教师与课程关系。并在程序中设有增加,删除,输出信息的功能。对于教师和课程我们选择 STL中vector动态数组来处理。对于教师与课程关系,我们选择二维数组存储。2需求分析2.1 课题调研为了完成本次课程设计任务,我们对二分图的知识点进行了复习,学习了求解二分图最大匹配问题的匈牙利算法。为本次课程设计任务的完成打下了良好的基

5、础。2.2 功能需求此次设计任务,要求设计基于二分图的匹配算法求解教务排课表程序。一是求出最大匹 配数,二是输出一种最大匹配。为了避免每次都需要输入的繁琐,我们设计文件来存储,管 理数据。3方案设计1.1 总体功能设计本次课程设计共分为四个主要功能:(1)文件读写(2)数据添加,删除,输出(3)求最大匹配数(4)输出一种最大匹配对于文件的操彳调用了 C语言文件操作函数fwrite(),fread() 。数据以二进制文件 保存。对于数据添加删除,直接调用push_back() , erase()函数处理。对于求最大匹配数,我们选用匈牙利算法。对于输出一种最大匹配的算法如下图所示:求匹总算法:设G

6、广匕.石产是二部图,直切鱼:匕二外 £产0 G产G。石累3是率图,倒自束,得旦。否则在匕中进取度 景小的结点,不有设这个姑息是明 且与相邻越的一小姑点为6,取用3域,EEU蚓从图3中制去结点,力(即匕=匕-m处),得到图Gj我对古图执行以上算法科时。此外,我们还设计文件重置函数,使数据重置更加方便。1.2 数据结构设计本次课程设计主要使用了图,vector动态数组,具体的设计方案和操作过程将在个人报告中给出,在此不再赘述。1.3 函数原型设计int main()vector<teacher> tea;vector<course> cou;printf(&quo

7、t;欢迎使用教务排课系统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.添加教师

8、可任课课程n");-# -欢迎下载精品文档printf("4.输出教师信息n");printf("5.输出课程信息n");printf("6.输出教师可任课课程n");printf("7.求最大匹配数n");printf("8.求一种最大匹配方案n");printf("9. 清空数据库n");printf("10.删除教师信息:n");printf("11.删除课程信息:n");printf("12.关闭程序:n&q

9、uot;);printf(" 请输入正确的选项");int i = 0;scanf("%d",&i);getchar();switch(i)case 1:AddTeacher(tea);break;case 2:AddCourse(cou);break;case 3:AddMatrix(mat,tea,cou);break;case 4:PrintTeacher(tea);break;case 5:PrintCourse(cou);break;case 6:PrintMartix(mat,tea,cou);break;case 7:Get_t_c

10、(tea,cou);ANS();printf("%dn",ans);break;case 8:Get_t_c(tea,cou);solve(tea,cou);break;case 9:Reset(mat,tea,cou);break;case 10:DeleteTeacher(tea);memset(mat,0,sizeof(mat);break;case 11:DeleteCourse(cou);memset(mat,0,sizeof(mat);break;case 12:system ("cls");printf("谢谢使用!")

11、;exit(0);break;default:printf("输入的选项不正确:");system ("pause");system ("cls");return 0;1.4 用户界面设计运行时为DOS#面,通过输入选项选择操作。4 方案实现4.1 开发环境与工具开发环境:Code:Blocks13.124.2 个人设计实现(按组员分小节)4.2.1 邵威设计实现( 1 )文件读取void ReadTeacher(vector<teacher> &tea)/ 读取教师文件 tea.clear();FILE *Tea

12、;if(Tea = fopen("teacher.txt","rb+") = NULL)/打开操作不成功printf("teacher.txt can not be opened n");exit(1);/结束程序的执行teacher a;while(fread(&a,sizeof(struct teacher),1,Tea) != 0) tea.push_back(a);fclose(Tea);void ReadCourse(vector<course> &cou)/ 读取课程文件cou.clear();

13、FILE *Cou;if(Cou = fopen("course.txt","rb+") = NULL)/打开操作不成功printf("course.txt can not be opened n");exit(1);/结束程序的执行course a;while(fread(&a,sizeof(struct course),1,Cou) != 0) cou.push_back(a);fclose(Cou);void ReadMatrix(matrix &mat)/ 读取邻接矩阵FILE *Mat;if(Mat = fo

14、pen("matrix.txt","rb+") = NULL)/打开操作不成功printf("matrix.txt can not be opened n");exit(1);/结束程序的执行fread(mat,sizeof(bool),N*N,Mat);fclose(Mat);(2)文件写入void WriteTeacher(vector<teacher> tea)/写入教师文件FILE *Tea;if(Tea = fopen("teacher.txt","wb+") = NULL

15、)/打开操作不成功printf("teacher.txt can not be opened n");exit(1);/结束程序的执行vector<teacher>:iterator it;for(it=tea.begin();it!=tea.end();it+)fwrite(&(*it).name),sizeof(struct teacher),1,Tea);fclose(Tea);void WriteCourse(vector<course> cou)/ 写入课程文件FILE *Cou;if(Cou = fopen("cours

16、e.txt","wb+") = NULL)/打开操作不成功printf("course.txt can not be opened n");exit(1);/结束程序的执行vector<course>:iterator it;for(it=cou.begin();it!=cou.end();it+)fwrite(&(*it).name),sizeof(struct course),1,Cou);fclose(Cou);void WriteMatrix(matrix mat)/ 写入邻接矩阵FILE *Mat;if(Mat =

17、 fopen("matrix.txt","wb+") = NULL)/打开操作不成功printf("matrix.txt can not be opened n");exit(1);/结束程序的执行fwrite(mat,sizeof(bool),N*N,Mat);fclose(Mat);(3)数据添加添加教师(添加后要保存写入文件)添加课程( 添加后要保存写入文件)void AddTeacher(vector<teacher> &tea)/int n = 0;teacher a;cout<<"

18、 请输入添加教师的个数:"cin>>n;cout<<" 请输入教师姓名:n"for(int i = 1; i <= n; i+)cin>>;tea.push_back(a);WriteTeacher(tea);void AddCourse(vector<course> &cou)/int n = 0;course a;cout<<" 请输入添加课程的个数:"- 5 - 欢迎下载。精品文档cin>>n;cout<<" 请输入课程

19、名称:n"for(int i = 1; i <= n; i+)cin>>;cou.push_back(a);WriteCourse(cou);void AddMatrix(matrix &mat,vector<teacher> tea,vector<course> cou)/添加关系( 添加后要保存写入文件 )int n = 0;cout<<" 请输入添加关系的数目:"cin>>n;PrintTeacherPlus(tea);PrintCoursePlus(cou);for(in

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

21、 cou)/输出其中一种最大匹配ANS();while(ans-)/输出其中一种最大匹配memset(p,0,sizeof(p);for(int i = 1;i <= t;i+)/求度for(int a = 1;a <= c;a+)if(matia = true) pi+;int MIN = 0;for(int i = 1;i <= t;i+)/初始化 MINif(pi != 0)MIN = i;break;- 9 - 欢迎下载。for(int i = 1;i <= t;i+)/if(pMIN > pi && pi != 0) MIN = i;fo

22、r(int i = 1;i <= c;i+)/if(matMINi = true) cout<<teaMIN-1.name<<" for(int a = 1;a <= c;a+)/matMINa = false;for(int a = 1;a <= t;a+)/ matai = false;break;ReadMatrix(mat);求最小度处理最小度老师任 "<<<<" 课 "<<endl;删除该老师删除该课4.2.2 崔超设计实现( 1 )匈牙利算法求

23、最大匹配数bool Find(int i)/匈牙利算法for(int n = 1;n <= t;n+)/为每位老师找一个课if(matin && !usen)/如果老师找到课并且这个课没有其他老师任教usen = true;/标记此课有老师任教if(pn = 0|Find(pn)/pi这位老师还没找到课或者 能够找到他的课pn = i;/标记此老师有课return true;return false;void ANS()/ 求最大匹配数ans = 0;memset(p,0,sizeof(p);for(int i = 1;i <= c;i+)memset(use,0,

24、sizeof(use);if(Find(i) ans+;void Get_t_c(vector<teacher> tea,vector<course> cou)/获取教师数和课程数t = tea.size();c = cou.size();(2)数据删除void DeleteTeacher(vector<teacher> &tea)/ 删除教师信息 teacher a;vector<teacher>:iterator it = tea.begin();cout<<" 请输入删除教师名字:n"cin>&

25、gt;;while(it != tea.end()if(strcmp(,(*it).name) = 0)it = tea.erase(it);elseit+;cout<<" 教师删除成功:n"PrintTeacher(tea);WriteTeacher(tea);ReadTeacher(tea);void DeleteCourse(vector<course> &cou)/ 删除课程信息 course a;vector<course>:iterator it = cou.begin();cout<&l

26、t;" 请输入删除课程名称:n"cin>>;while(it != cou.end()if(strcmp(,(*it).name) = 0)it = cou.erase(it);elseit+;cout<<" 教师删除成功:n"PrintCourse(cou);WriteCourse(cou);ReadCourse(cou);( 1 )数据输出void PrintTeacher(vector<teacher> tea)/4.2.3 吴越设计实现输出教师信息cout<<" 教

27、师名单如下:"<<endl;for(int i = 0;i < tea.size();i+)cout<<<<endl;void PrintCourse(vector<course> cou)/ 输出课程信息cout<<" 课程名单如下:"<<endl;for(int i = 0;i < cou.size();i+)cout<<<<endl;void PrintMartix(matrix mat,vector<teac

28、her> tea,vector<course> cou)/输出邻接矩阵for(int i = 0;i < N;i+)for(int n = 0;n < N;n+)if(matin = true)cout<<<<"老师可以任"<<<<" 课 "<<endl;void PrintTeacherPlus(vector<teacher> tea)/输出教师信息和编号cout<<" 教师名单及编号如

29、下:"<<endl;for(int i = 0;i < tea.size();i+)cout<<" 编号: "<<i+1<<" "<<" 姓名 "<<<<endl;void PrintCoursePlus(vector<course> cou)/输出课程信息和编号cout<<" 课程名单及编号如下:"<<endl;for(int i = 0;i < cou.

30、size();i+)cout<<" 编号: "<<i+1<<" "<<" 名称 "<<<<endl;(2)文件重置void Reset(matrix &mat,vector<teacher> &tea,vector<course> &cou)/重置文件FILE *Tea;if(Tea = fopen("teacher.txt","w+") = NULL)/打开

31、操作不成功printf("teacher.txt can not be opened n");exit(1);/结束程序的执行fclose(Tea);FILE *Cou;if(Cou = fopen("course.txt","w+") = NULL)/打开操作不成功printf("course.txt can not be opened n");exit(1);/结束程序的执行精品文档fclose(Cou);FILE *Mat;打开操作不成功if(Mat = fopen("matrix.txt"

32、;,"w+") = NULL)/ printf("matrix.txt can not be opened n");exit(1);/结束程序的执行fclose(Mat);ReadTeacher(tea);ReadCourse(cou);ReadMatrix(mat);(3)主函数int main()vector<teacher> tea;vector<course> cou;printf("欢迎使用教务排课系统n");printf("正在导入数据库。n");ReadTeacher(tea)

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

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

35、();switch(i)case 1:AddTeacher(tea);break;case 2:AddCourse(cou);break;case 3:AddMatrix(mat,tea,cou);break;case 4:PrintTeacher(tea);break;case 5:PrintCourse(cou);break;case 6:PrintMartix(mat,tea,cou);break;case 7:Get_t_c(tea,cou);ANS();printf("%dn",ans);break;case 8:Get_t_c(tea,cou);solve(te

36、a,cou);break;case 9:Reset(mat,tea,cou);break;case 10:DeleteTeacher(tea);memset(mat,0,sizeof(mat);break;case 11:DeleteCourse(cou);memset(mat,0,sizeof(mat);break;case 12:system ("cls");printf("谢谢使用!");exit(0);break;default:printf("输入的选项不正确:");system ("pause");sy

37、stem ("cls");return 0;5 测试与调试5.1 个人测试(按组员分小节)5.1.1 邵威测试/ 测试内容:输出一种最大匹配#include<stdio.h>#include<string.h>#include<iostream>using namespace std;/ 测试序列5 5 2 2 5 3 2 3 4 2 1 5 3 1 2 5 1 2#define N 205#define SIZEt 50;#define SIZEc 50;int n,m,x,u,ans;bool useN;int pN;bool lin

38、eNN;typedef struct teacherchar name32;teacher;typedef struct coursechar name32;course;bool find(int x)/ 匈牙利算法为每位老师找一个课如果老师找到课并且这个课没有其他老师任教 标记此课有老师任教if(pi = 0|find(pi)/pi这位老师还没找到课或者 能够找到他的课for(int i = 1;i <= m;i+)/ if(linexi && !usei)/ usei = true;/pi = x;/标记此老师有课return true;return false;v

39、oid solve()/ 输出其中一种最大匹配while(ans-)/输出其中一种最大匹配memset(p,0,sizeof(p);for(int i = 1;i <= n;i+)/求度for(int a = 1;a <= m;a+) if(lineia = true) pi+;int MIN = 0;for(int i = 1;i <= n;i+)/初始化 MINif(pi != 0)MIN = i;break;for(int i = 1;i <= n;i+)/求最小度if(pMIN > pi && pi != 0) MIN = i;for(in

40、t i = 1;i <= m;i+)/处理最小度if(lineMINi = true)printf("第d老师任第 d门课n",MIN,i);for(int a = 1;a <= m;a+)/删除该老师lineMINa = false;for(int a = 1;a <= n;a+)/删除该课lineai = false; break;void ANS()/ 求最大匹配数- 13 。-欢迎下载精品文档for(int i = 1;i <= n;i+)memset(use,0,sizeof(use);if(find(i) ans+;int main()p

41、rintf("请输入老师人数和课程的数目");scanf("%d%d”,&n,&m);/n 老师,m 课ans=0;memset(line,0,sizeof(line);memset(p,0,sizeof(p);printf(" 按顺序输入老师能上的课程 n");for(int i = 1;i <= n;i+)/构建邻接矩阵i表示第i位老师u表示第i门课scanf("%d",&x);while(x-)scanf("%d",&u);lineiu = true;ANS()

42、;solve();return 0;5.1.2 崔超测试/测试内容:匈牙利算法输出最大匹配数#include<stdio.h>#include<string.h>#include<iostream>using namespace std;/ 测试序列5 5 2 2 5 3 2 3 4 2 1 5 3 1 2 5 1 2#define N 205#define SIZEt 50;#define SIZEc 50;int n,m,x,u,ans;bool useN;int pN;bool lineNN;typedef struct teacherchar nam

43、e32;teacher;typedef struct coursechar name32;course;bool find(int x)/ 匈牙利算法for(int i = 1;i <= m;i+)/为每位老师找一个课if(linexi && !usei)/如果老师找到课并且这个课没有其他老师任教usei = true;/标记此课有老师任教if(pi = 0|find(pi)/pi这位老师还没找到课或者 能够找到他的课pi = x;/标记此老师有课return true;return false; void ANS()/ 求最大匹配数for(int i = 1;i <

44、;= n;i+)memset(use,0,sizeof(use);if(find(i) ans+;printf("%dn",ans);int main()printf(" 请输入老师人数和课程的数目");scanf("%d%d”,&n,&m);/n 老师,m 课ans=0;memset(line,0,sizeof(line);memset(p,0,sizeof(p);printf(" 按顺序输入老师能上的课程n");for(int i = 1;i <= n;i+)/构建邻接矩阵i 表示第 i 位老师 u

45、 表示第 i 门课scanf("%d",&x);while(x-)scanf("%d",&u);lineiu = true;ANS();return 0;5.1.3吴越测试吴越设计部分的测试将在系统运行中给出,在此不再赘述。5.2系统运行初始化界面:-15独迎下载精品文档-21独迎下载耳:,上二 HA据范庭 任导效任任 - 灰LIE仔谓濡王采单界面:功能一:添加教师(添加课程,教师可任课课程类似,不逐一演示)功能二:输出教师信息(输出课程,教师可任课课程类似,不逐一演示)功能三:求最大匹配数1申加教师 已弗如深理a浑加彼邦可任深课程 :i

46、语出於丽信旦 工输出潺桂尼E 心辖出教帅可伫课黑理 【泵苗L2配场&.求一肿最大匹配方案 足清空勤揩库 10.翻除鼓时信皂: ILf芸课程信息i 12.关司存序 离语入正通妁选项7功能四:求一种最大匹配方案功能六:清空数据库功能七:删除教师(删除课程类似,不逐一演示)E播加课隹 赤兀裁培可任照理度 伟国戟用信息 u希巴便程信息 E 一验巴教huh三出现程 E京最大匕配彼 艮单一和星丁江配方安 ,港三处据国 .(.可.摩工.*七9: Ri.ei除调件侑.由 -5关母程序: 湾省人止冲的丘庆10 K近人聊除我At名字小王k技任意罐组纸一,一功能八:退出6课题总结6.1 课题性能分析本次课程

47、设计,我们经过详细的前期调研和问题分析,按照题目要求,图作为基本的数据结构,利用匈牙利算法求解最大匹配数,输出一种最大匹配匈牙利算法时间复杂度:O (n)空间复杂度:O (1)输出一种最大匹配时间复杂度:O (n2)空间复杂度:O (1)6.2 课题评价与与团队协作本次课程设计由三名同学共同完成,虽然系统仍然有这样那样的问题和不足,但更重要的是在这个过程中大家所学到的一切。在整个设计和完成的过程中,每位组员都十分认真对待自己负责的部分,时刻保持与其他组员进行交流,就完成课程设计任务中出现的问题和瑕疵进行改正和优化。小组中人人各司其职,从前期算法讨论到最后的调试优化,每个人都秉持互相尊重,精诚合

48、作的宗旨,使本次课程设计的任务圆满顺利完成。6.3 个人设计小结(按组员分小节)6.3.1 邵威设计小结我主要输出一种最大匹配的功能,为了实现这个功能,我翻阅了离散数学(下)的课本 和课件,将老师所授的算法予以实现。最大的收获就是能够把其他学科的知识化为代码,为我们所用,来解决生活中的问题。通过这次实验,我复习了 C语言文件函数的使用,学习了调用STL中的vector动态数组来处理问题,对STL 了使用有了深刻的认识和体会,此外我还深切的体会到团队合作的重要性,在实践过程中不仅要完成好自己的任务,也要积极配合团队。 在应用的时候发现自己的不足,这次课程设计不同于平时练习,平时练习都是小程序虽然

49、知道模块化编程的好处但精品文档没有真正的去实践,所以这次实验让我体会很深。6.3.2 崔超设计小结此次课程设计,我主要负责对教师课程及关系矩阵的删除操作及部分文件的读写,我们采用了 c+标准库中的vector容器,首先我们输入变量并 while循环,通过迭代器找到所在 位置,利用STL中vector的删除函数将其删除,然后将数组中被删除元素后元素前移一个 单位,此次我们决定用"+rb" 方式对文件进行读写,由此创建一个二进制文件,通过字符大小进行输入输出较为方便。通过这个课程设计,我对类的使用进行了复习,加深了掌握程度,同时也用了链表这一数据结构, 对其概念有了更深刻的认识

50、,也熟练了自己对数据结构的使用。这一部分由自己独立完成,切实锻炼了自己的编程能力,并且也得到同学对一些错误和细节上的帮忙修改订正,和对我的不断鼓励,在此非常感谢他们。6.3.3 吴越设计小结由于我在小组分工中负责A 类的可视化部分, 所以只结合Vector 模板类 , 编写了输出教师、课程以及教师与课程关系的函数, 然后由于数据是存储在外部文件当中, 因而同时负责了编写重置文件的函数. 本次实验没有采用可视化, 所以我还简单地对主函数界面进行了美化 , 使其功能划分更加清晰便于操作.通过此次课程设计,我对数据结构知识有了更加熟练的应用, 对模板类有了更加深刻的认识 , 深深体会到了它的便利性.

51、 我认为在实际的上机操作过程中,不仅让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次课程设计任务,可以提高我分析设计的能力和编程能力,为后续的学习打好基础。以后我会努力学好每门专业课,让自己拥有更多的知识,解决更多问题。附录AA-1课题程序设计分工课题程序设计分工学号姓名程序设计函数原型、类功能说明20154349邵威typedef struct teacher/教师类型typedef struct course/课程类型typedef bool matrixNN;/关系类型数据存储结构void ReadTeacher(vector<teacher>

52、 &tea) ;void ReadCourse(vector<course> &cou) ;void ReadMatrix(matrix &mat) ;文件读取void WriteTeacher(vector<teacher> tea);void WriteCourse(vector<course> cou);void WriteMatrix(matrix mat);文件写入void AddTeacher(vector<teacher> &tea) ;void AddCourse(vector<course&

53、gt; &cou) ;VoidAddMatrix(matrix&mat,vector<teacher>tea,vector<course> cou) ;数据添加void solve(vector<teacher>tea,vector<course>cou);输出一种最大匹配20154499崔超void DeleteTeacher(vector<teacher> &tea);void DeleteCourse(vector<course> &cou) ;数据删除void Get_t_c(vec

54、tor<teacher>tea,vector<course>cou);bool Find(int i);void ANS();匈牙利算法求最大 匹配数20154306吴越void PrintTeacher(vector<teacher> tea);void PrintCourse(vector<course> cou);Void PrintMartix(matrixmat,vector<teacher>tea,vector<course> cou);Void PrintTeacherPlus(vector<teach

55、er> tea);void PrintCoursePlus(vector<course> cou);数据输出voidReset(matrix&mat,vector<teacher>&tea,vector<course> &cou) ;文件重置int main();主函数设计工作量比重:邵威:崔超:吴越 =4 : 3 : 3A-2课题报告分工课题报告分工章节内容完成人1课题概述1.1课题任务邵威1.2课题原理2需求分析2.1课题调研邵威2.2功能需求3方某设计3.1总体功能设计邵威3.2数据结构设计3.3函数原型设计3.4用户界面

56、设计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>#include<stdlib.h>#include<vector&

57、gt;#define N 200using namespace std;typedef struct teacherchar name32;teacher;typedef struct coursechar name32;course;typedef bool matrixNN;matrix mat;/ 全局变量邻接矩阵int t,c,ans;bool useN;int pN;void ReadTeacher(vector<teacher> &tea)/ 读取教师文件tea.clear();FILE *Tea;if(Tea = fopen("teacher.txt","rb+") = NULL)/打开操作不成功printf("teacher.txt can not be opened n");exit(1);/结束程序的执行teacher a;while(fread(&a,sizeof(struct teacher),1,Tea) != 0) tea.push_back(a);fclose

温馨提示

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

评论

0/150

提交评论