数据结构课设之地图着色doc.docx
- 文档编号:7532488
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:18
- 大小:157.28KB
数据结构课设之地图着色doc.docx
《数据结构课设之地图着色doc.docx》由会员分享,可在线阅读,更多相关《数据结构课设之地图着色doc.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构课设之地图着色doc
课程设计(论文)任务书
软件学院学 院 软件+电气专 业2011—3 班
一、课程设计(论文)题目 地图着色问题
二、课程设计(论文)工作自2012年12月29日起至2013年1月6日止
三、课程设计(论文)地点:
科技楼机房
四、课程设计(论文)内容要求:
1.本课程设计的目的
⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,
编写程序求解指定问题;
⑵初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生
的理论知识,提升编程水平。
2.课程设计的任务及要求
1)基本要求:
⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象
数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告;
⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;
⑶程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;
⑷每位同学需提交可独立运行的程序和规范的课程设计报告。
2)课程设计论文编写要求
⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进
行书写和装订;
⑵课程设计报告(论文)包括中文目录、设计任务、需求分析、概要设计、详细设计、
编码实现、调试分析、课设总结、谢辞、参考文献、附录等;
⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。
3)课程设计评分标准:
⑴学习态度:
10分;
⑵系统设计:
20分;
⑶编程调试:
20分;
⑷回答问题:
20分;
⑸论文撰写:
30分。
4)参考文献:
⑴严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社.2010.3
⑵严蔚敏,吴伟民.数据结构题集(C语言版)[M].清华大学出版社.1999.2
⑶何钦铭,冯燕等.数据结构课程设计[M].浙江大学出版社.2007.8
5)课程设计进度安排
⑴准备阶段(4学时):
选择设计题目、了解设计目的要求、查阅相关资料;
⑵程序模块设计分析阶段(4学时):
程序概要设计、详细设计;
⑶代码编写调试阶段(8学时):
程序模块代码编写、调试、测试;
⑷撰写论文阶段(4学时):
总结课程设计任务和设计内容,撰写课程设计论文。
学生签名:
2012年12月29日
6)课程设计题目具体要求:
已知江西地图,请设计地图着色软件,对11个地级市进行着色,要求相邻地级市所使用的颜色不同,并保证使用的颜色最少。
基本要求:
⑴地图采用图型数据结构,每个地级市为一个节点,边表示对应的两个地级市相邻。
⑵设计着色算法,保证邻接点不是同一种颜色。
⑶演示程序以用户和计算机的对话方式进行。
课程设计(论文)评审意见
(1)学习态度(10分):
优( )、良( )、中( )、一般( )、差( );
(2)系统设计(20分):
优()、良( )、中( )、一般( )、差( );
(3)编程调试(20分):
优( )、良( )、中( )、一般( )、差( );
(4)回答问题(20分):
优( )、良( )、中( )、一般( )、差( );
(5)论文撰写(30分):
优( )、良( )、中( )、一般( )、差( );
(6)格式规范性及考勤是否降等级:
是( )、否( )
评阅人:
王英华 职称:
讲师
2013年1月7日
一、设计任务
问题描述:
已知江西地图,请设计地图着色软件,对11个地级市进行着色,要求相邻地级市所使用的颜色不同,并保证使用的颜色最少。
基本要求:
⑴地图采用图型数据结构,每个地级市为一个节点,边表示对应的两个地级市相邻。
⑵设计着色算法,保证邻接点不是同一种颜色。
⑶演示程序以用户和计算机的对话方式进行。
二、需求分析
该程序包含八个模块:
第一个加载程序模块,主要是体现界面的美观;第二个模块为着色模块,包含初始化地图和开始着色,其中开始着色还包括了判断着色方案是否可行的模块,判断着色方案可行性的模块又包括对当前点的邻接点所有的点是否已经着色分析的模块;第四个模块为菜单模块;其他两个模块分别为关于江西和关于作者的模块;
三、系统设计
3.1系统总体框架,系统流程
3.2详细设计
voidload();//加载UI
调用system()函数改变窗体颜色,调用time,实现加载效果
voidmenu();//菜单
主要使用输出语句,以及调用system()函数实现改变窗体颜色以及暂停和清屏
voidaboutjx();//关于江西
使用输出语句输出关于江西的简介
voidaboutme();//关于作者
输出语句输出关于作者
intall_color(intjx_map[N][N],intcolor[N],intcurrent);
使用for语句测试当前点所连接的点是否全部被标记颜色
intyes(intjx_map[N][N],intcolor[N],intcurrent);
使用for语句和if语句判断测试当前着色方案是否可用
voidsta(intjx_map[N][N],intcolor[N],intsum,intcurrent);
综合使用if-else和for语句对地图进行递归着色,着色过程中用yes函数进行判断是否可行;
voidset_color();
set_color()函数为接口进行着色,包括初始化,还有调用sta()函数着色;
关于着色的算法为本程序重点,下面用进行详细分析:
调用递归
调用
调用
四、编码实现
4.1测试当前点所连接的点是否全部被标记颜色
intall_color(intjx_map[N][N],intcolor[N],intcurrent)
{
intp=1;
for(intj=1;j { if(jx_map[current][j]==1) p=0; } if(p)return1; return0; } 4.2测试当前着色方案是否可行 intyes(intjx_map[N][N],intcolor[N],intcurrent) { if(all_color(jx_map,color,current)) return1; intj; for(j=1;j if((jx_map[current][j]==1)&&(color[j]==color[current])) return0;/*城市相邻且颜色相同*/ return1; } 4.3从current开始标记,sum的地图上的11市,color[N]为标记颜色 voidsta(intjx_map[N][N],intcolor[N],intsum,intcurrent) { inti; if(current<=sum) { for(i=1;i<=4;i++)/*测试每种颜色*/ { color[current]=i;/*尝试着色*/ if(yes(jx_map,color,current))/*若尝试成功*/ { sta(jx_map,color,sum,current+1);/*检查下一个城市*/ return; } } } } 4.4菜单设计 voidmenu() { system("color2F"); printf("〓〓〓〓〓〓〓〓〓欢迎使用地图着色系统软件! 〓〓〓〓〓〓〓〓〓\n"); printf("〓\3\3----1.关于江西----〓\n"); printf("〓\3----2.江西地图----\3\3〓\n"); printf("〓\3----3.江西地图着色----\3〓\n"); printf("〓----4.关于本软件----\3〓\n"); printf("〓〓〓〓〓〓〓〓〓〓〓5.退出系统||||〓〓〓〓〓〓〓〓〓〓〓〓〓\n"); printf("\3请选择服务: \n"); } 4.5实现加载的动态界面 voidload()//加载中的动态界面 { intn=5; time_tstart,end; while(n--)/*五次循环*/ { start=time(NULL);//读取机器时间 end=time(NULL); stringch[5]; ch[4]="〓〓\n"; ch[3]="〓〓〓〓\n"; ch[2]="〓〓〓〓〓〓\n"; ch[1]="〓〓〓〓〓〓〓〓\n"; ch[0]="〓〓〓〓〓〓〓〓〓\n"; while(end-start<1)/*每次循环1s*/ { system("color3D"); cout<<"请稍等……\n\n\n\t\t〓〓〓〓〓〓〓〓〓\n"; cout<<"\t\t〓程序加载中。 〓\n"; cout<<"\t"< system("cls"); end=time(NULL); } system("cls"); } system("color2F"); cout<<"\t\t〓〓〓加载成功! ! ! 〓〓〓"; printf("\n"); } 五、调试分析与结果 起初着色算法只写了两个函数yes()函数和sta()函数,另外写了个初始化的函数让用户来输入江西地图,那时候运行正常,可是后来想想江西地图固定的,也就是说用户不能让原本不相邻的南昌和赣州输成相邻,所以,另外写了个初始化,直接在代码中写好了,并注明了1~11编号分别代表那个省;但是问题出现了,当测试到第二个城市的时候就不染色了,程序异常退出;苦苦查了好久,发现由于我标号的时候,景德镇市标为2号,只和1号上饶市相连,而1号之前已经染色了,导致找不到下一个染色对象了。 于是改进yes函数,添加all_color()函数进行判断是否当前点相连的其他城市已全部染色,如果是,依然满足条件,返回1;染下一个城市; 六、课设总结 通过这次课程设计我感受了编程的乐趣从中也学到了不少知识。 大一我们学习了C语言程序设计和c++程序设计但学的不是很好前几章还行,但越往后就有点跟不上了因此C语言编程中的问题很大。 尤其是指针还有形参和实参的传等问题都没搞的很清楚而且同大多数人一样眼高手低编程量太少了容易出问题所以做起来很困难。 我感受最深的一点是以前上实验课时只是注重如何编写函数能够完成所需要的功能似乎没有明确的战术只是凭单纯的意识和简单的语句来堆砌出一段程序。 感觉有点像张飞打仗有勇无谋只要能完成任务就行。 但现在编程感觉完全不同了。 在编写一个程序之前自己能够综合考虑各种因素首先选取自己需要的数据结构是树还是图或是别的什么然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。 最后在编写每一个函数之前可以仔细斟酌比对挑选出最适合当前状况的算法。 这样即使在完整的程序还没有写出来之前自己心中已经有了明确的原图了。 这样无形中就提高了自己编写的程序的质量。 经历了这次课程设计不仅对我的学习提供了帮助而且在意志力方面也得到了锻炼。 没有足够的耐力和信心就很难坚持对课程设计每一步的顺利进行。 总之我会继续我的兴趣编写程序的相信在越来越多的尝试之后自己会不断进步不断提高的 七、参考文献 严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社.2010.3 严蔚敏,吴伟民.数据结构题集(C语言版)[M].清华大学出版社.1999.2 何钦铭,冯燕等.数据结构课程设计[M].浙江大学出版社.2007.8 ThomasH.Cormen.CharlesE.Leserson算法导论机械工业出版社2006.9 XX百科-四色猜想 八、附源代码 江西地图着色.cpp #include #include #include"江西地图着色.h" usingnamespacestd; intmain() { load(); menu(); intn; while(cin>>n) { switch(n) { case1: aboutjx();break; case2: JXmap();break; case3: set_color();break; case4: aboutme();break; case5: aboutme();cout<<"bye~! \n";exit (1); default: cout<<"InputError! "; } system("pause"); system("cls"); menu(); } return0; } 江西地图着色.h /*----------------------------------------------- 定理: 注明的四色定理表明: 任何平面地图可以使用4种颜色给每个不同的城 市或区域着色,而保证相邻的城市着不同的颜色。 思路: 把地图上的每个城市抽象为一个点,并给每个城市 编号,相邻的城市之间用直线连接。 据此做出邻接 矩阵,若第i个城市与第j个城市相邻,则 map[i][j]=1,否则map[i][j]=0。 算法: 按照编号从小到大的顺序检查每个城市,对每个城 市从1到4使用4种颜色着色,若当前颜色可用(即 不与相邻城市颜色相同),则着色;否则测试下一 种颜色。 */ #include #include #include #include #include #defineN12 usingnamespacestd; voidmenu();//菜单 voidload();//加载UI voidaboutjx(); voidaboutme(); //voidInitMap(); voidaboutjx() { system("color8E"); cout<<"江西省,简称赣(gàn),位于中国东南部,长江中下游南岸。 属江南地带,"< cout<<"东临浙江、福建,南嵌广东,西靠湖南,北毗湖北、安徽而共接长江,"< cout<<"是中国毗邻省市最多的省份,为长江三角洲、珠江三角洲和海西经济区等发达地区的共同腹地。 "< cout<<"自古以来素有“物华天宝、人杰地灵”之誉,文物古迹、风景名胜众多,"< cout<<"庐山、滕王阁、三清山、婺源、龙虎山、井冈山等闻名海内外。 "< cout<<"江西总面积16.69万平方公里,人口4456.75万(2010年),由11个地级市组成,省会南昌市。 "< } voidaboutme() { system("color1C"); cout<<"ECJTU_软件+电气3班付强编写;"< cout<<"大二第一学年数据结构课程设计;"< cout<<"感谢您的使用;"< } /*voidInitMap(intjx_map[N][N])//江西地图是固定的,所以此功能隐去 { memset(jx_map,0,sizeof(jx_map)); cout<<"scanfa,b,standfora,bisnear."< cout<<"scanf00exitscanf"< inta,b; while(scanf("%d%d",&a,&b),a&&b) { jx_map[a][b]=jx_map[b][a]=1; } } */ intall_color(intjx_map[N][N],intcolor[N],intcurrent) { intp=1; for(intj=1;j { if(jx_map[current][j]==1) p=0; } if(p)return1; return0; } /*测试当前着色方案是否可行*/ intyes(intjx_map[N][N],intcolor[N],intcurrent) { if(all_color(jx_map,color,current)) return1; intj; for(j=1;j if((jx_map[current][j]==1)&&(color[j]==color[current])) return0;/*城市相邻且颜色相同*/ return1; } /*从current开始标记,sum为总的地图上的11市,color[N]为标记颜色*/ voidsta(intjx_map[N][N],intcolor[N],intsum,intcurrent) { inti; if(current<=sum) { for(i=1;i<=4;i++)/*测试每种颜色*/ { color[current]=i;/*尝试着色*/ if(yes(jx_map,color,current))/*若尝试成功*/ { sta(jx_map,color,sum,current+1);/*检查下一个城市*/ return; } } } } voidload()//加载中的动态界面 { intn=5; time_tstart,end; while(n--) { start=time(NULL);//延迟两秒操作 end=time(NULL); stringch[5]; ch[4]="〓〓\n"; ch[3]="〓〓〓〓\n"; ch[2]="〓〓〓〓〓〓\n"; ch[1]="〓〓〓〓〓〓〓〓\n"; ch[0]="〓〓〓〓〓〓〓〓〓\n"; while(end-start<1) { system("color3D"); cout<<"请稍等……\n\n\n\t\t〓〓〓〓〓〓〓〓〓\n"; cout<<"\t\t〓程序加载中。 〓\n"; cout<<"\t"< system("cls"); end=time(NULL); } system("cls"); } system("color2F"); cout<<"\t\t〓〓〓加载成功! ! ! 〓〓〓"; printf("\n"); } voidmenu() { system("color2F"); printf("〓〓〓〓〓〓〓〓〓〓〓欢迎使用地图着色系统软件! 〓〓〓〓〓〓〓〓〓〓\n"); printf("〓\3\3----1.关于江西----〓\n"); printf("〓\3----2.江西地图----\3\3〓\n"); printf("〓\3----3.江西地图着色----\3〓\n"); printf("〓----4.关于本软件----\3〓\n"); printf("〓〓〓〓〓〓〓〓〓〓〓〓5.退出系统||||〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"); printf("\3请选择服务: \n"); } voidJXmap() { system("color5E"); cout<<"各市代号: 1上饶2景德镇3九江4南昌"< cout<<"5鹰潭6抚州7宜春8新余9吉安10萍乡11赣州"< cout<<"_1_2_3_4_5_6_7_8_9_10_11"< cout<<"1|0,1,1,1,1,1,0,0,0,0,0"< cout<<"2|1,0,0,0,0,0,0,0,0,0,0"< cout<<"3|1,0,0,1,0,0,1,0,0,0,0"< cout<<"4|1,0,1,0,0,1,1,0,0,0,0"< cout<<"5|1,0,0,0,0,1,0,0,0,0,0"< cout<<"6|1,0,0,1,1,0,1,0,1,0,1"< cout<<"7|0,0,1,1,0,1,0,1,1,1,0"< cout<<"8|0,0,0,0,0,0,1,0,1,0,0"< cout<<"9|0,0,0,0,0,1,1,0,0,1,1"< cout<<"10|0,0,0,0,0,0,1,0,1,0,0"< cout<<"11|0,0,0,0,0,1,0,0,1,0,0"< cout<<"表示i市与j市有领土相邻"< } voidset_color() { intcolor[N]={0};/*每个市所染的颜色*/ inti; intjx_map[N][N]={{0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,0,0,0,0,0}, {0,1,0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,1,0,0,1,0,0,0,0}, {0,1,0,1,0,0,1,1,0,0,0,0}, {0,1,0,0,0,0,1,0,0,0,0,0}, {0,1,0,0,1,1,0,1,0,1,0,1}, {0,0,0,1,1,0,1,0,1,1,1,0}, {0,0,0,0,0,0,0,1,0,1,0,0}, {0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 地图 着色 doc