地图着色问题.docx
- 文档编号:2876967
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:23
- 大小:49.03KB
地图着色问题.docx
《地图着色问题.docx》由会员分享,可在线阅读,更多相关《地图着色问题.docx(23页珍藏版)》请在冰豆网上搜索。
地图着色问题
数据结构实验报告
实验一:
地图着色问题
班级:
计算机科学与技术1班
姓名学号
完成日期:
2015.11.16
一、题目描述
已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少。
二、需求分析
1.已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;
2.将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系;
3.演示程序以用户和计算机的对话方式进行;
4.最后对结果做出简单分析。
三、概要设计
把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。
着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。
结构设计:
因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以选择邻接表来存储。
其中:
typedefstructArcNode
{
intx;//表示与当前顶点所表示省份相邻的省份的位置信息
structArcNode*next;//指向下一个弧结点
}ArcNode;//表示省份之间相邻关系的弧结点
typedefstruct
{
char*name;//顶点所表示的省份的名称
intcolor;//省份的颜色,用数字表示不同的颜色
ArcNode*firstnext;//指向第一个弧
}Province[35];
四、详细设计
该程序一共包含三个模版:
分别为初始化模版、着色模版和输出模版。
1.初始化模块
声明表示省份的顶点信息、省份之间相邻关系的弧的信息,并为其赋值。
2.着色模块
//分别为各个省份着色。
for(i=1;i<=34;i++)
{
province[i].color=0;
}
for(i=1;i<=34;i++)
{
j=1;
p=province[i].firstnext;
while(p!
=NULL)
{
while(p!
=NULL&&j!
=province[p->x].color)
{
p=p->next;
}
if(p!
=NULL)
j++;
}
province[i].color=j;
}
3.输出模块
输出各个省份的颜色信息。
for(i=1;i<=34;i++)
{
printf("%s:
",province[i].name);
printf("%d\n",province[i].color);
}
printf("/n0表示白色,1表示蓝色,2表示红色,3表示绿色,4表示黄色");
return0;
五、调试分析
因题目已知是中国地图,为中国地图染色,所以此程序没有输入,只有输出信息。
从输出的信息来看,最多使用了4种颜色。
关于程序测试时存在的问题:
写完程序后,出现了没有错误但是却无法输出信息的问题,从网上查找发现是对警告没处理好的原因,随后,参考了网上的解决方案把问题解决了。
关于程序的改进:
首先,此程序使用的是有向图,而省份之间的相邻关系用无向图就可以表示,这是程序可以改进的地方;其次,程序输出结果描述省份颜色的是数字,也可以改进后使之输出具体的颜色。
六、总结
经过这次课程设计实验,我体会到只有保持耐心,坚持到底才有可能做好事情。
这次课程设计加强了我动手解决问题的能力,巩固和加深了对数据结构的理解,提高了综合运用课程知识的能力,培养了独立思考、深入研究、分析问题和解决问题的能力。
同时,我也明白了将理论知识与实际相结合的重要性,只有理论知识远远不够,因为在实际设计中还是会遇到不少问题,这次实验使我发现了自己很多知识漏洞,这对我今后的学习来说是一次非常宝贵的体验。
七、附录
源程序文件名清单:
地图着色问题.C//主程序
#include
#include
typedefstructArcNode{
intx;//表示与当前顶点所表示省份相邻的省份的位置信息
structArcNode*next;
}ArcNode;//表示省份之间相邻关系的弧结点
typedefstruct{
char*name;//顶点所表示的省份的名称
intcolor;
ArcNode*firstnext;//指向第一个弧
}Province[35];
intmain()
{
Provinceprovince;
inti,j;
ArcNode
*p,*hu1,*hu2,*hu3,*hu4,*hu5,*hu6,*hu7,*hu8,*hu9,*hu10,*hu11,*hu12,*hu13,*hu14,*hu15,*hu16,*hu17,*hu18;
ArcNode*hu19,*hu20,*hu21,*hu22,*hu23,*hu24,*hu25,*hu26,*hu27,*hu28,*hu29,*hu30,*hu31,*hu32,*hu33,*hu34,*hu35;
ArcNode*hu36,*hu37,*hu38,*hu39,*hu40,*hu41,*hu42,*hu43,*hu44,*hu45,*hu46,*hu47,*hu48,*hu49,*hu50,*hu51,*hu52;
ArcNode*hu53,*hu54,*hu55,*hu56,*hu57,*hu58,*hu59,*hu60,*hu61,*hu62,*hu63,*hu64,*hu65,*hu66;
ArcNode*hu67,*hu68,*hu69,*hu70,*hu71,*hu72,*hu73,*hu74,*hu75,*hu76,*hu77,*hu78,*hu79,*hu80,*hu81,*hu82,*hu83,*hu84;
ArcNode*hu85,*hu86,*hu87,*hu88,*hu89,*hu90,*hu91,*hu92,*hu93,*hu94,*hu95,*hu96,*hu97,*hu98,*hu99,*hu100;
ArcNode*hu101,*hu102,*hu103,*hu104,*hu105,*hu106,*hu107,*hu108,*hu109,*hu110,*hu111,*hu112,*hu113,*hu114,*hu115,*hu116,*hu117;
ArcNode*hu118,*hu119,*hu120,*hu121,*hu122,*hu123,*hu124,*hu125,*hu126,*hu127,*hu128,*hu129;
ArcNode*hu130,*hu131,*hu132,*hu133,*hu134,*hu135,*hu136,*hu137,*hu138,*hu139,*hu140,*hu141,*hu142;//声明表示省份顶点的信息
hu1=(ArcNode*)malloc(sizeof(ArcNode));
hu2=(ArcNode*)malloc(sizeof(ArcNode));
hu3=(ArcNode*)malloc(sizeof(ArcNode));
hu4=(ArcNode*)malloc(sizeof(ArcNode));
hu5=(ArcNode*)malloc(sizeof(ArcNode));
hu6=(ArcNode*)malloc(sizeof(ArcNode));
hu7=(ArcNode*)malloc(sizeof(ArcNode));
hu8=(ArcNode*)malloc(sizeof(ArcNode));
hu9=(ArcNode*)malloc(sizeof(ArcNode));
hu10=(ArcNode*)malloc(sizeof(ArcNode));
hu11=(ArcNode*)malloc(sizeof(ArcNode));
hu12=(ArcNode*)malloc(sizeof(ArcNode));
hu13=(ArcNode*)malloc(sizeof(ArcNode));
hu14=(ArcNode*)malloc(sizeof(ArcNode));
hu15=(ArcNode*)malloc(sizeof(ArcNode));
hu16=(ArcNode*)malloc(sizeof(ArcNode));
hu17=(ArcNode*)malloc(sizeof(ArcNode));
hu18=(ArcNode*)malloc(sizeof(ArcNode));
hu19=(ArcNode*)malloc(sizeof(ArcNode));
hu20=(ArcNode*)malloc(sizeof(ArcNode));
hu21=(ArcNode*)malloc(sizeof(ArcNode));
hu22=(ArcNode*)malloc(sizeof(ArcNode));
hu23=(ArcNode*)malloc(sizeof(ArcNode));
hu24=(ArcNode*)malloc(sizeof(ArcNode));
hu25=(ArcNode*)malloc(sizeof(ArcNode));
hu26=(ArcNode*)malloc(sizeof(ArcNode));
hu27=(ArcNode*)malloc(sizeof(ArcNode));
hu28=(ArcNode*)malloc(sizeof(ArcNode));
hu29=(ArcNode*)malloc(sizeof(ArcNode));
hu30=(ArcNode*)malloc(sizeof(ArcNode));
hu31=(ArcNode*)malloc(sizeof(ArcNode));
hu32=(ArcNode*)malloc(sizeof(ArcNode));
hu33=(ArcNode*)malloc(sizeof(ArcNode));
hu34=(ArcNode*)malloc(sizeof(ArcNode));
hu35=(ArcNode*)malloc(sizeof(ArcNode));
hu36=(ArcNode*)malloc(sizeof(ArcNode));
hu37=(ArcNode*)malloc(sizeof(ArcNode));
hu38=(ArcNode*)malloc(sizeof(ArcNode));
hu39=(ArcNode*)malloc(sizeof(ArcNode));
hu40=(ArcNode*)malloc(sizeof(ArcNode));
hu41=(ArcNode*)malloc(sizeof(ArcNode));
hu42=(ArcNode*)malloc(sizeof(ArcNode));
hu43=(ArcNode*)malloc(sizeof(ArcNode));
hu44=(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地图 着色 问题