数据结构课程设计地图着色问题

合集下载

C语言地图着色

C语言地图着色

课程设计地图着色课程设计名称:课程设计专业班级:学生姓名:学号:指导教师:课程设计时间:计算机专业课程设计任务书目录1 需求分析 (4)2 概要设计 (4)3详细设计 (5)4 运行环境 (6)5开发环境 (6)6 程序设计.............................................................................................6~97 调试分析........................................................................................9~108 测试结果 (10)9参考文献 (11)10心得体会 (11)11成绩评价表 (12)a) 1需求分析A 已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;B 将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系;C 演示程序以用户和计算机的对话方式进行;D 最后对结果做出简单分析。

b ) 2概要设计:i 画程序整体结构图ii 分配函数功能功能模块的划分及模块间调用关系typedef struct //定义图{vextype vexs[MAXedg]; //存放边的矩阵adjtype arcs[MAXedg][MAXedg]; //图的邻接矩阵int vnum,arcnum; //图的顶点数和边数}Graph;C) 3详细设计i ) 主要功能模块的算法思想及其步骤着色模块:int colorsame(int s,Graph G)//判断这个颜色能不能满足要求{int i,flag=0;for(i=1;i<=s-1;i++)//分别与前面已经着色的几块比较if(G.arcs[i][s]==1&&color[i]==color[s]){flag=1;break;}return flag;void output(Graph G)//输出函数{int i;for(i=1;i<=G.vnum;i++)printf("%d ",color[i]);printf("\n");}void trycolor(int s,Graph G)//s为开始图色的顶点{int i;if(s>G.vnum)//递归出口{output(G);exit(1);}else{for(i=1;i<=N;i++)//对每一种色彩逐个测试{color[s]=i;if(colorsame(s,G)==0)trycolor(s+1,G);//进行下一块的着色}}}d) 4 运行环境i 软件环境操作系统:Windows8ii 硬件环境处理器:Intel Pentium 166MX内存:32MB硬盘空间:1GB显卡:SVGAE) 5 开发环境I 编程环境:Dev-C++ 5.0 beta 9.2 (4.9.9.2)Ii 编程语言:C语言,ANSI C89。

着色问题课程设计方案模板

着色问题课程设计方案模板

一、课程背景着色问题是图论中的一个经典问题,也是计算机科学和数学中的一个重要课题。

着色问题旨在为图的顶点分配颜色,使得相邻的顶点颜色不同。

着色问题不仅具有理论意义,而且在实际应用中也有广泛的应用,如地图着色、VLSI设计、社会网络分析等。

本课程设计旨在让学生通过实践,深入理解着色问题的理论和方法,提高学生的编程能力和问题解决能力。

二、课程目标1. 理解着色问题的基本概念和性质;2. 掌握常用的着色算法及其实现;3. 能够分析和比较不同着色算法的效率;4. 培养学生运用所学知识解决实际问题的能力;5. 提高学生的编程能力和团队协作能力。

三、课程内容1. 着色问题的基本概念和性质- 图的定义和性质- 着色问题的定义和性质- 着色问题的分类2. 常用着色算法- 欧拉着色算法- 四色定理- 2-着色和3-着色算法- 胶囊算法3. 着色算法的实现- 图的表示方法- 着色算法的编程实现- 算法效率分析4. 着色问题的应用案例- 地图着色- VLSI设计- 社会网络分析四、教学方法1. 讲授法:系统讲解着色问题的基本概念、性质和常用算法;2. 讨论法:引导学生对着色问题进行深入探讨,分析不同算法的优缺点;3. 实验法:通过编程实践,让学生掌握着色算法的实现和效率分析;4. 案例分析法:结合实际应用案例,让学生了解着色问题的应用场景。

五、课程评价1. 课堂表现:参与讨论、提问和回答问题的积极性;2. 作业完成情况:按时完成作业,作业质量;3. 实验报告:实验报告的完整性和准确性;4. 课程设计:完成着色问题的解决方案,包括算法实现和效率分析;5. 期末考试:考察学生对着色问题理论知识的掌握程度。

六、课程时间安排1. 第一周:介绍着色问题的基本概念和性质;2. 第二周:讲解常用着色算法;3. 第三周:着色算法的实现和效率分析;4. 第四周:着色问题的应用案例;5. 第五周:课程设计和实验报告;6. 第六周:课程总结和期末考试。

数据结构课程设计地图着色问题

数据结构课程设计地图着色问题

课程设计报告课程设计题目:地图着色问题专业:xxxxxxxxx班级:xxxxxxxxx姓名:xxxxxxxxx一:需求分析:1)已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;2)将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系;3)演示程序以用户和计算机的对话方式进行;4)最后对结果做出简单分析。

二:概要设计一:设计思路把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。

着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。

二:数据结构设计因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以我选择的邻接表来存储。

其中:typedef struct ArcNode{int x; (表示与当前顶点所表示省份相邻的省份的位置信息)struct ArcNode *next; (指向下一个弧结点)}ArcNode; (表示省份之间相邻关系的弧结点)typedef struct{char *name; (顶点所表示的省份的名称)int color; (省份的颜色,用数字表示不同的颜色)ArcNode *firstnext; (指向第一个弧)}shengfen[35];三:详细设计该程序一共包含三个模版:分别为初始化模版、着色模版和输出模版。

1.初始化模块声明表示省份的顶点信息、省份之间相邻关系的弧的信息,并为其赋值。

2.着色模块为各个省份着色。

for(i=1;i<=34;i++){sheng[i].color=0;}for(i=1;i<=34;i++){j=1;p=sheng[i].firstnext;while(p!=NULL){while(p!=NULL&&j!=sheng[p->x].color){p=p->next;}if(p!=NULL)j++;}sheng[i].color=j;}3.输出模块输出各个省份的颜色信息。

地图着色问题课程设计

地图着色问题课程设计

地图着色问题课程设计一、课程目标知识目标:1. 理解地图着色问题的基本概念,掌握地图着色中涉及到的图论知识;2. 学会运用不同的算法解决地图着色问题,了解其优缺点;3. 掌握地图着色问题在实际生活中的应用,如行政区划、交通规划等。

技能目标:1. 能够运用所学知识,对给定的地图进行有效着色,提高解决问题的能力;2. 学会运用图论软件或工具进行地图着色的实际操作,培养动手实践能力;3. 通过团队合作,培养学生的沟通协调能力和解决问题的能力。

情感态度价值观目标:1. 激发学生对图论和地图着色问题的兴趣,培养良好的学习态度;2. 引导学生关注地图着色问题在实际生活中的应用,提高学生的社会责任感和实践意识;3. 培养学生面对复杂问题时,保持积极的心态,勇于克服困难,寻求解决问题的方法。

课程性质:本课程为数学学科选修课程,结合图论知识,以地图着色问题为载体,培养学生的逻辑思维能力和实际操作能力。

学生特点:学生处于高年级阶段,具备一定的数学基础和逻辑思维能力,对新鲜事物充满好奇心,具备一定的团队协作能力。

教学要求:注重理论与实践相结合,充分调动学生的积极性,引导学生主动参与课堂讨论和实践活动,提高学生的综合素养。

在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. 图论基础知识回顾:包括图的定义、图的表示方法、顶点和边的性质等;教材章节:第一章 图的基本概念2. 地图着色问题的提出:介绍地图着色的背景、意义及应用场景;教材章节:第二章 图的着色问题3. 地图着色算法:学习并掌握贪心算法、回溯算法、遗传算法等地图着色方法;教材章节:第三章 着色问题的算法及其应用4. 地图着色问题的实际操作:运用图论软件或工具进行地图着色实践;教材章节:第四章 着色问题的实际应用5. 地图着色问题案例分析:分析生活中的地图着色问题实例,如行政区划、交通规划等;教材章节:第五章 着色问题的案例分析6. 团队合作与交流:分组讨论、分享学习心得,培养学生的团队协作和沟通能力。

中国地图四色染色问题

中国地图四色染色问题

中国地图四色染色问题LtD中国地图四色染色问题一、问题描述将中国地图用四种不同的颜色红、蓝、绿、黄来染色,要求相邻的省份染色不同,有多少种不同的方案?二、问题分析本文将中国地图的34个省、直辖市、自治区、以及特别行政区转化为图论中的图模型。

其中每个省、市、自治区、特别行政区用图中的一个结点表示,两个结点间联通仅当两个板块接壤。

那么问题转化为图论中的染色问题。

由于海南、台湾省不与其它任何省份相邻,所以如果除海南、台湾外如果有n种染色方法,那么加上海南和台湾省后,有4*4*n种染色方法。

下面考虑除海南和台湾后的32个结点的染色方法。

三、中国地图染色方法采用分开海南和台湾省的分析方法,一方面的原因是除海南和台湾后的32个结点,可以组成一个联通图,因为海南省和台湾省不和任何其它省份邻接。

另一方面,我们建立一个联通图模型后,染色问题可以用深度优先遍历算法DFS,或者广度优先遍历算法BFS来解决,由于该方法的时间复杂度较高,属于暴力法,少考虑两个省份可以减少计算机处理此问题的时间。

本文采用DFS算法来解决这个染色问题。

3.1 DFS算法简介DFS算法是图的一种图的深度遍历算法,即按照往深的地方遍历一个图,假设到一个分支的尽头,那么原路返回到最近一个未被遍历的结点,继续深度遍历。

DFS遍历的具体步骤可为下:1)标记图中所有结点为“未访问〞标记。

2)输出起始结点,并标记为“访问〞标记3)起始结点入栈4)假设栈为空,程序结束;假设栈不为空,取栈顶元素,假设该元素存在未被访问的邻接顶点,那么输出一个邻接顶点,并置为“访问〞状态,入栈;否那么,该元素退出栈顶。

3.2 染色问题中的DFS算法设计我们先对任一结点染色,然后用DFS从该结点出发,遍历该图,遍历的下一结点颜色染为与之相邻的结点不同的颜色即可。

如果该结点无法染色那么回到上一个结点重新染色,直到所有的结点都被染色即可。

最后统计染色种数。

染色问题的算法伪代码可以描述如下:color_DFS(当前染色结点):for i in 所有颜色{ while j的已染色邻接点if 结点j相邻接点被染成i颜色标记并breakif 未被标记{当前结点染为i色if 当前结点为最后一个结点endelsecolor_DFS(next)}}3.3 数据结构设计为了实现DFS染色算法,我们需要设计相应的数据结构。

地图着色课程设计

地图着色课程设计
数据结构课程设计
题目地图着色问题
姓名杨康林伟胜
学号13091012 1309101209
年级09级
专业信息与计算科学
指导教师熊保平
年月日
题目:地图着色
一、需求分析:
1.已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;
2.将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系;
<>
<>
100
0
N 4着色的颜色数
[30]={0}来存储对应块的对应颜色
;
;
定义图
{
[];存放边的矩阵
[][];图的邻接矩阵
;图的顶点数和边数
};
***********************************************************
( u)
{
i;
(1<)
{
([i])
i;
这次的课程设计使我们懂得了理论与实际相结合是非常重要的,只有理论知识是远远不够的。在整个设计过程中,构思是很花费时间的。调试时也经常遇到这样那样的错误,马虎或者知识不够而不懂得设计,用错了方法。在这过程中我们发现了很多我们自己的不足和知识的漏洞。
通过这次的课程设计之旅,使我们收益匪浅,这也是我们以后人生中的一次宝贵的经验吧。
顶点为:a b c d e f
相邻边:
五课程设计总结
经过一个星期的课程设计,过程曲折可谓一言难尽。整天都是对着电脑,不然就是翻阅资料。在此期间我们失落过,也曾一度热情高涨。点点滴滴令我回味无穷。这次课程设计使我体会到只有做到细心耐心,恒心才能做好事情。
这次的课程设计加强了我们动手,思考和解决问题的能力,巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力,培养了我们选用参考书,查阅手册以及文献资料的能力,培养独立思考,深入研究,分析问题,解决问题的能力。

数据结构课设之地图着色

数据结构课设之地图着色

课程设计(论文)任务书软件学院学院软件+电气专业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.85)课程设计进度安排⑴准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料;⑵程序模块设计分析阶段(4学时):程序概要设计、详细设计;⑶代码编写调试阶段(8学时):程序模块代码编写、调试、测试;⑷撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文。

数据结构实验报告四-地图染色问题

数据结构实验报告四-地图染色问题

数据结构实验报告实验名称:地图染色问题学生姓名:刘健_______________班级:2013211129______________班内序号:10__________________学号:2013210796______________日期:2014/12/19_____________1.实验目的目的:掌握图基本操作的实现方法了解最小生成树的思想和相关概念了解最短路径的思想和相关概念学习使用图解决实际问题的能力内容:对下图所示的地图进行染色,要求使用尽可能少的颜色进行染色,完成该算法。

测试数据:2. 程序分析2.1 存储结构二维数组struct NODE{int ID;int Links;}; 2.2 程序流程2.3 关键算法分析算法1:void SortNode(int b[][N],NODE SN[]) {for (int i=0;i<N;i++){SN[i].ID = i; SN[i].Links = 0; //初始化顶点信息for (int j=0;j<N;j++)SN[i].Links += b[i][j]; //计算每个顶点的度}for (int i=1;i<N;i++) //冒泡排序for (int j=0; j<N-i;j++)if (SN[j].Links<SN[j+1].Links){NODE tmp = SN[j];SN[j] = SN[j+1];SN[j+1] = tmp;}} [1] 算法功能:对邻接矩阵的顶点按度进行排序[2] 算法基本思想:计算每个顶点的度数,然后进行冒泡排序[3] 算法空间、时间复杂度分析:O(n^2)[4] 代码逻辑算法2:bool IsValid(int b[N][N], int k, int x[])//判断该颜色是否可用,b是邻接矩阵,k是当前染色的顶点序号,x是顶点颜色数组{for(int i=0; i<N; i++)if(!b[k][i])continue; //i和k不相邻,继续else if( x[k]== x[i])return false; //i和k相邻,并且颜色相同,该颜色不合适return true;}[1] 算法功能:判断相邻顶点的颜色是否重复[2] 算法基本思想:比较相邻顶点的颜色是否相同,相同的话返回值为false[3] 算法空间、时间复杂度分析:O(n)[4] 代码逻辑3.程序运行结果分析4.总结4.1实验的难点和关键点难点及关键点:对相邻顶点的颜色进行判断比较,如果相同则需要替换——用一个bool值来判断是否对颜色进行更改4.2心得体会通过这次的编程实验,我熟悉地掌握图基本操作的实现方法,了解了最小生成树的思想和相关概念,也明白了最短路径的思想和相关概念,并且学会了使用图解决实际问题,可谓受益匪浅。

地图着色问题

地图着色问题

地图着色问题说明:任何平面区域图都可以用四种颜色着色,使相邻区域颜色互异。

这就是四色定理。

要求给定区域图排出全部可能的四着色方案。

区域相邻关系用矩阵表示,每个区域又一个序号,(从0七连续排列)adj【i】【j勘硎厩 騣,j相邻。

数组cilir记录每个区域上着的色,用1.2.3.4表示。

程序应包括四个函数:coloring对所给邻接矩阵找着全部着色方案色乐的:对区域i在指定的颜色范围内选出可选颜色或报告失败(失败返回-1)辞令次日卡:判断对区域i在指定的颜色c是否可用八寸卡:选色失败时或完成一种着色方案时进行回溯另外可定义output函数,每次输出一种着色方案/*递归算法:void Coloring(区域 n)1. 令颜色集ClrSet={ 没有被区域n的邻居区域使用的颜色 }.2. 如果ClrSet是空集,返回.3. 对ClrSet中的每种颜色c,作循环:3.1 为区域n着色c。

3.2 如果所有区域都已着色(n是最后一个区域),那么显示/保存着色结果.3.3 否则对下一个尚未着色的区域(n+1),调用Coloring(n+1).4. 把区域n变为没有着色的区域.--------------------------------------------------------*/template<int node_count = 8>class CColoring{private:typedef int node_type;typedef int color_type;typedef std::set<node_type> node_set;typedef std::vector<color_type> color_array;public:void operator()(const int _Matrix[node_count][node_count]){matrix = _Matrix;colors_of_nodes.resize(node_count, 0); total_count = 0;coloring(0);}private:void coloring(node_type n){// 颜色的使用情况std::vector<bool> used_colors;node_type m;color_type c;// 初始化颜色的使用情况used_colors.resize(color_count, false);// 遍历每个与区域n相邻的区域mfor(m = 0; m < node_count; ++m){if(matrix[n][m]){// 获取m的颜色c = colors_of_nodes[m];// m已着色if(c != 0)used_colors[c] = true;}}// 遍历每个未被n的邻居使用的颜色cfor(c = 1; c < color_count; ++c){if(!used_colors[c]){// 为n着色ccolors_of_nodes[n] = c;// 着色完毕if(n >= node_count - 1)++total_count;// 输出结果_tprintf(_T("---------------------\n"));_tprintf(_T("Method %d:\n"), total_count);for(m = 0; m < node_count; ++m){_tprintf(_T("node: %d, color: %d\n"), m, colors_of_nodes[m]); }}// 还有区域没有着色else{// 为下一个未着色的区域,调用coloring()coloring(n + 1);}}}// 将n设置为没有着色的区域colors_of_nodes[n] = 0;}// 0表示无色,1-4表示4种不同颜色static const int color_count = 5;// 邻接矩阵const int (* matrix)[node_count];// 各区域对应的颜色color_array colors_of_nodes;// 总的着色方案数int total_count;};void main(){int Matrix[4][4] ={{ 0, 1, 0, 0 },{ 1, 0, 0, 0 },{ 0, 0, 0, 1 },{ 0, 0, 1, 0 },};CColoring<4> coloring;coloring(Matrix);}/*递归算法:void Coloring(区域 n)1. 令颜色集ClrSet={ 没有被区域n的邻居区域使用的颜色 }.2. 如果ClrSet是空集,返回.3. 对ClrSet中的每种颜色c,作循环:3.1 为区域n着色c。

高中数学地图填色教案

高中数学地图填色教案

高中数学地图填色教案教学内容:地图着色问题是一种经典的图论问题,通过这个问题可以引导学生理解和掌握基本的图论知识,提高学生的数学建模能力和解决问题的能力。

教学目标:1. 理解地图着色问题的基本概念和规则;2. 掌握地图填色的基本方法和技巧;3. 提高学生的数学逻辑思维能力和解决问题的能力。

教学重点:1. 地图填色问题的基本概念;2. 地图填色问题的基本方法;3. 地图填色问题的应用。

教学难点:1. 地图填色问题的数学建模;2. 地图填色问题的解决方法;3. 地图填色问题的实际应用。

教学准备:1. 教师准备PPT课件;2. 学生准备课本和笔记本。

教学步骤:一、导入(5分钟)通过展示一幅地图填色的示例,引导学生思考如何对地图进行正确的填色。

二、呈现(10分钟)介绍地图填色问题的基本概念和规则,提出一个简单的地图填色问题,让学生尝试解答。

三、讲解(15分钟)讲解地图填色问题的基本方法和技巧,向学生介绍常见的填色算法和应用场景,引导学生思考如何解决更复杂的地图填色问题。

四、练习(20分钟)让学生分组进行练习,通过多个地图填色问题的解答,巩固所学知识和技巧,培养学生的解决问题能力。

五、总结(5分钟)总结本节课的学习内容,强调地图填色问题的重要性和应用价值,激发学生对数学的兴趣和热情。

六、作业布置(5分钟)布置相关的课外作业,让学生在课下进一步巩固所学知识,提高解决问题的能力。

教学评价:通过本节课的学习,学生应能够掌握地图填色问题的基本概念和方法,提高数学建模能力和解决问题的能力,同时提高学生对数学的兴趣和热情。

地图着色课程设计

地图着色课程设计

算法分析与设计课程设计说明书地图着色学院:计算机与控制工程学院专业:计算机科学与技术学生姓名:xxxxx学号:成绩学生姓名:xxxxx 学号:成绩指导教师:内容提要此题为地图着色问题,由地图着色问题很容易想到图的着色问题,因此可以把地图抽象为无向图来解决地图的着色问题。

对地图的抽象相当于对图的抽象,即以邻接矩阵来实现地图的区域相邻的描绘,而对地图的区域数即以图的顶点数来描绘。

设计说明书的内容包括需求分析,概要设计,详细设计,代码实现,后期测试等内容,需求分析是对此问题所需要实现的功能的介绍,概要设计是对所需要实现功能的模块划分,以及初步的实现思想,详细设计通过编写大致的代码来实现功能,代码实现则是具体的解决问题,解决此问题设计了两个算法,贪心,回溯,在程序的测试阶段,回溯算法对同一个问题的解决速率高于贪心算法,但是结果都是以最少的颜色数来染色。

课题实现的环境是在window环境下的eclipse中,通过在其中输入地图的区域数,图的连接情况,来选择相应的算法来实现染色,本次课题所采用的数据结构主要是二维数组来抽象图的邻接矩阵。

目录1引言(或绪论) (1)2需求分析 (2)2.1 问题分析 (2)2.3问题解决 (2)2.3 运行环境及开发工具 (3)2.4功能需求 (3)2.4.1 地图的抽象及输入 (3)2.4.2 地图着色的算法设计 (3)2.4.3 界面设计 (3)2.4.4 输出设计 (3)2.5任务分配 (4)3概要设计 (4)3.1 数据定义 (4)3.2 功能模块定义 (4)3.2.1 地图的抽象输入模块 (4)3.2.2 输出模块 (4)3.2.3 地图染色模块 (4)3.2.4 界面设计模块 (5)3.2.5 主模块 (5)3.3 程序流程图 (6)4 详细设计 (7)4.1 地图输入模块 (7)4.1.1 数据类型 (7)4.1.2 具体实现 (7)4.2 界面设计模块 (7)4.2.1 数据类型 (7)4.2.2 具体实现 (7)4.3 算法设计模块 (9)4.3.1 回溯法过程 (9)4.3.2 贪心法过程 (10)5 程序设计模块 (11)5.1 界面设计代码 (11)5.2 染色实现模块 (15)6 程序测试 (19)6.1 运行结果 (19)6.2 贪心、回溯着色结果及分析 (19)7 算法时间、空间复杂度分析 (22)7.1 递归回溯 (22)7.2 贪心算法 (22)8 课设总结…………………………………………………………………………2 2 8.1 已实现功能及不足 (22)8.2 心得体会 (22)参考文献 (24)1引言(或绪论)此次课程设计的要求是已知某地图(如中国地图),对各区域进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少。

数据结构课程设计报告地图着色问题

数据结构课程设计报告地图着色问题

数据结构课程设计报告地图着色问题地图着色问题是一个经典的图论问题,涉及到如何用最少的颜色给地图上的各个区域进行着色,使得相邻的区域颜色不同。

在数据结构课程设计报告中,我们将详细介绍地图着色问题的定义、解决方法以及实现过程。

一、问题定义地图着色问题可以用图论的方式来描述。

给定一个地图,地图上的每个区域可以看作图的一个顶点,而区域之间的邻接关系可以看作图的边。

问题的目标是找到一种着色方案,使得相邻的区域颜色不同,且使用的颜色数最少。

二、解决方法1. 贪心算法:贪心算法是一种简单而有效的解决地图着色问题的方法。

具体步骤如下:a. 选择一个未着色的区域。

b. 遍历该区域的所有邻接区域,记录已经使用的颜色。

c. 选择一个未使用的颜色,给该区域着色。

d. 重复步骤a-c,直到所有区域都被着色。

2. 回溯算法:回溯算法是一种穷举所有可能解的方法,通过逐步试错来找到最优解。

具体步骤如下:a. 选择一个未着色的区域。

b. 遍历所有可用的颜色,尝试给该区域着色。

c. 检查该区域与相邻区域的颜色是否冲突,如果冲突则回溯到上一步。

d. 重复步骤a-c,直到所有区域都被着色。

三、实现过程1. 数据结构设计:在解决地图着色问题时,我们可以使用图的邻接矩阵或邻接表来表示地图的结构。

邻接矩阵适用于稠密图,而邻接表适用于稀疏图。

此外,我们还需要使用一个数组来记录每个区域的颜色。

2. 算法实现:根据选择的解决方法,我们可以实现相应的算法来解决地图着色问题。

对于贪心算法,我们可以按照贪心的策略来选择颜色;对于回溯算法,我们可以使用递归来穷举所有可能的解。

3. 算法优化:地图着色问题属于NP完全问题,因此在实际应用中,对于大规模的地图,穷举所有可能的解是不可行的。

我们可以通过一些优化策略来提高算法的效率,如剪枝、启发式搜索等。

四、实例分析假设我们有一个地图,包含5个区域,相邻区域如下所示:区域1:区域2、区域3区域2:区域1、区域3、区域4区域3:区域1、区域2、区域4、区域5区域4:区域2、区域3、区域5区域5:区域3、区域4我们可以使用贪心算法来解决这个问题。

数据结构——地图填色问题资料

数据结构——地图填色问题资料

《数据结构》实验报告院系光电与信息工程学院专业电子信息工程姓名学号电话2011级2班2013年5月22日一、实验题目数据结构——期末综合实验——地图填色问题二、问题描述1976年。

美国科学家APPEL和HAKEN利用计算机证明了:对一张地图,可以用不超过4种颜色对其填色,使得相邻的区域填上不同的颜色。

要求输入一张行政区地图,用4种颜色对其填色,要求相邻的行政区域内没有相同的颜色,给出所有的填色方案,并统计方案个数。

三、数据描述首先考虑如何存储行政区域图,由于邻接矩阵能更好地描述各行政区之间的关系,所以采用邻接矩阵G来存储地图。

G[ I , J ]=1 表示I ,J 两个行政区域相邻,为0表示不相邻可采用二维数组来表示邻接矩阵G;另外设一数组COLOR[I]记录各行政区域所填颜色,分别取值为{1(红色),2(黄色),3(蓝色),4(绿色)};数据描述如下:INT G[N][N];INT COLOR[N+1];四、概要设计(1)全局变量定义#define MAX_VERTEX_NUM 26 // 最大行政区域个数//------------------------------- 邻接矩阵数据类型的定义--------------------------------typedef struct{char vexs[MAX_VERTEX_NUM]; // 行政区域-顶点向量int acrs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 邻接矩阵int vexnum; // 地图当前行政区域个数}Graph ;int Color[MAX_VERTEX_NUM+1]; // 地图行政区域填充的颜色存储数组long int Count=0; // 统计总共的填色方案个数(2)本程序主要包含6个函数:•主函数main()•显示行政区域的邻接矩阵关系Printf_Graph ()•对地图行政区域进行第一次着色Load_Color ()•对地图行政区域进行各种方案着色的显Print_Color ()•判断这个颜色对第n行政区域能不能满足要求Same_Color()各函数间调用关系如下:Create_GraphPrintf_GraphMain()Load_ColorSame_ColorPrint_Color(3)主函数的伪码main(){定义一个邻接矩阵G;创建地图及行政区域的邻接矩阵;显示行政区域的邻接矩阵关系;对地图进行填充颜色;改变颜色,显示多种方案;}五、详细设计//------------------------------- 邻接矩阵数据类型的定义--------------------------------#define MAX_VERTEX_NUM 26 // 最大行政区域个数typedef struct{char vexs[MAX_VERTEX_NUM]; // 行政区域-顶点向量int acrs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵int vexnum; // 地图当前行政区域个数}Graph ;/**************************************************************************************** *函数:Create_Graph*功能:建立地图的邻接矩阵*说明:输入参数Graph *G本函数很好的完成了地图的创建以及行政区域之间的存储。

(甘志国)解“地图着色”问题的通法

(甘志国)解“地图着色”问题的通法

解“地图着色”问题的通法甘志国(该文已发表 中国数学教育(高中版),2011(6):44,47)“地图着色”问题的背景是四色猜想:对于任意的平面地图或球面地图,只需四种颜色就可把相邻的区域区分开来.此猜想在上世纪七十年代借助计算机已给出了证明,但至今却没有纯数学的证明,用纯数学的方法只证得五种颜色足够.所以,寻求四色猜想的纯数学证明仍是数学界的努力方向.据说,爱因斯坦(Albert Einstein ,1879~1955)的数学导师闵可夫斯基(Hermann Minkowski ,1864~1909)就曾在课堂上给学生讲述过四色猜想的证明,终因难度大而挂了黑板]1[.因为“地图着色”问题有这样的历史背景,所以此种题型受到了命题专家的青睐,本文将给出这种问题的统一解法.n A -着色问题 设图形A 包含a 个区域,要把图形A 的a 个区域着色(有n 种颜色可供使用,但这n 种颜色不一定用完),要求相邻的区域不能着相同的颜色,这种着色问题就叫做n A -着色问题,着色的方法数记作)(n f A .在n A -着色问题中,设最少需要0k 种颜色,最多需要k '种颜色,则用k k k k '++,,2,1,000 种颜色均可完成n A -着色问题.为求用),,1,(00k k k k k '+= 种颜色着色的方法数,可先把a 个区域分成k 组,要求每组至少有一个区域,每组中的任两个区域不相邻(即每组可着一色),设有k ϕ种方法(因为是分组,所以组与组之间无序,每组中的几个区域之间也无序);再从n 种颜色中按一定顺序选出k 种颜色分别给这k 组着色,有k nA 种着色方法.所以用k 种颜色着色的方法数是kn k A ⋅ϕ.得k n k k n k k n k k k k k n kA A A A A n f ''++'=⋅++⋅+⋅=⋅=∑ϕϕϕϕ1100000)(.例1 求)5(1图f ,即求用五种颜色对图1的四个区域着色(相邻的两个区域不同色)的方法数.图1解 图1可仅用三色或四色着色.若着三色,可先把区域1-4分成三组(每组着一色),只有(1、4,2,3)一种分法,即13=ϕ;再对这三组着色,有35A 种着法.所以着三色有35353A A =⋅ϕ种着法. 显然,着四色有45A 种方法.所以,180)5(45351=+=A A f 图.例2 求)4(2图f .图2 解 易知4,3,2=k .当2=k 时,12=ϕ(只有(1,2 、3、4) 一种分组方法),得24A 种方法;当3=k 时,33=ϕ(区域2,3,4中任两个均可为一组),得343A 种着法;当4=k 时,得44A 种着法.所以,1083)4(4434242=++=A A A f 图.例3 求)4(3图f .图3 解 易知4,3=k .当3=k 时,13=ϕ(只有(1,2、4,3、5) 一种分组方法),得34A 种着法;当4=k 时,34=ϕ(区域2、4,3、5,4、5均可作为一组),得443A 种着法.所以,963)4(44343=+=A A f 图.例4 恰用四种颜色对图4着色(相邻区域不同色),有几种着法?图4解 先求4ϕ.区域1必须为一组;再把2-6分成三组,可以验证没有三个区域为一组的情形,所以应把2-6分成“2+2+1”的三组.2、3不能为一组,2、4可为一组,剩下的3、5、6又要分成“2+1”的两组:即有(3、5,6)与(3、6,5)两种分法.所以(1,2、4)为两组时,仅用两种分组方法.用同样的讨论,得将1-6分成四组有且仅有五种分法:(1,24,35,6);(1,24,36,5);(1,25,36,4);(1,25,46,3);(1,35,46,2).得54=ϕ.所以所求答案为120444=⋅A ϕ(种).例5 (2008·全国I ·理·12)如图5,一环形花坛分成A 、B 、C 、D 四块.现有4种不同的花供选择,要求在每块里种1种花,且相邻的2块种不同的花,则不同的种法总数为( )A.96B.84C.60D.48 图5解 B.可共种2种花,先把D C B A 、、、分成两组使得每组能种同一种花,只有一种分法),(BD AC ,有24A 种种法;可共种3种花,先把D C B A 、、、分成三组使得每组能种同一种花,只有两种种分法),,(),,,(BD C A D B AC ,有342A 种种法;可共种4种花,有44A 种种法.并且别无它法,所以共有84A A 2A 443424=++种种法.例6 (2008·重庆·理·16)某人有4种颜色的灯泡(每种颜色的灯泡足够多),要在如图6所示的6个点A 、B 、C 、A 1、B 1、C 1上各装一个灯泡,要求同一条线段两端的灯泡不同色,则每种颜色的灯泡都至少用一个的安装方法共有 种(用数字作答) 图6(右下角的B 应改为1B )解 216.可把图6中的6个顶点分成四组(每组能用一种颜色来涂),有且只有这样的9种分法:),,,,(),,,,(),,,,(),,,,(111111111111C BC A AB C C B B A A BC B C A A BC C B A A),,,(),,,,(),,,,(),,,,(),,,,(111111*********B B C A AC C B B A AC B C B A AC C B C A AB C C B A AB .所以所求答案为216A 944=.另解 先安装A 、B 、C ,有34A 种安法;再安装A 1,有3种安法;最后安B 1、C 1,有3种安法(若C 1、A 同色,则B 1、C 同色;若C 1、A 不同色,则B 1有两种安法).所以所求答案为21633A 34=⨯⨯.例7 (2010·天津·理·10)如图7,用四种不同颜色给图中的A 、B 、C 、D 、E 、F 六个点涂色,要求每个点涂一种颜色,且图中每条线段的两个端点涂不同颜色,则不同的涂色方法有( )A.288种B.264种C.240种D.168种 图7解 B.在涂色上,图6与图7实质相同,也可把图6看成三棱柱111C B A ABC -,图7看成三棱柱BCF ADE -.由例6的解法知,本题用四色来涂,有216种涂法;用三色来涂,先把这六个点分成三组(每组能用一种颜色来涂),有且只有这样的两种分法:),,(),,,(CE BD AF DF BE AC ,所以有482A 34=种涂法.得答案为26448216=+.参考文献1 甘志国著.初等数学研究(II)下[M].哈尔滨:哈尔滨工业大学出版社,2009.429。

数据结构课程设计报告-地图着色

数据结构课程设计报告-地图着色

数据结构课程设计报告题目:地图着色一、需求分析1.问题描述现在有一张地图,为了便于区别各个地图上的版块,地图上相邻的颜色块应该是不同颜色。

现在的任务是给定一张地图,要对其进行着色,相邻版块之间颜色不能相同,输出最后的着色方案。

2.基本功能:功能一:为了程序的灵活性,可以让程序自由建立图。

功能二:对建好的图进行着色。

3.输入输出输入一张图的信息,正数输入边数和顶点数,输入边的关系,输入边的关系就是输入一条边的两个顶点。

颜色只用四种,所以每个结点的颜色域值只能取1到4输出时根据每个顶点不同的标号输出着色的结果。

二、概要设计1.设计思路给定四种颜色,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。

着色过程就是一个递归的过程,知道所有的顶点都处理完后结束着色。

2.数据结构设计:因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以我选择的邻接表来存储。

抽象数据类型图的定义如下:数据对象V:V是具有相同特性的数据元素的集合,成为顶点集。

数据关系R:R={VR}VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在的路径}基本操作P:CreateGraph(&G)操作结果:创建一张需要操作的无向图GDestroy(Graph &G)初始条件:无向图G存在操作结果:销毁图GLocate(&G,i)初始条件:无向图G存在操作结果:若在图G中存在顶点i,则返回该顶点在图中的位置,否则返回其他信息Traverse(current, &G, store[])初始条件:无向图G存在,在图中有第current个顶点操作结果:对图开始遍历,并且用他们的序号在store数组的相应位置上存储所染上的颜色print(&G)初始条件:无向图G存在操纵结果:打印图G中每个顶点的颜色着色情况is_different(test, G )初始条件:无向图G存在,test为图中的一个顶点操作结果:如果图G中test的邻接顶点颜色都不与test相同,则返回真,否则返回假3.软件结构设计:本程序分为两个模块:1.主程序模块int main(){建立一张图G建立存储最终着色结果的数组对地图进行着色打印地图着色的情况销毁图退出}无向操作图模块 ---------- 无向图中结点的赋值,遍历三、详细设计#define MAX_NUM 30struct ArcNode{int data;ArcNode *arcnext;};typedef struct{int vexdata;Colour clo;ArcNode *firstnext;}VNode,Adjlist[MAX_NUM];typedef struct {Adjlist vexlist;int arcnum,vexnum;}Graph;图的基本操作:void CreateGraph(Graph& MyGraph)//创建一个要求的无向图int is_different(VNode test,Graph G )//如果结点test中的颜色和图G中和他相邻的结点颜色不同,返回TRUE,否则返回FALSE void Traverse(int current,Graph &G,int store[])//对图G进行遍历,并且将分配的颜色按他在邻接表中的位置赋值到store中相应的位置void Destroy(Graph &G)//销毁已经存在的无向图Gint Locate(Graph MyGraph,int signal)寻找无向图中顶点为i的结点,返回其位置以上重要函数的的伪码算法int is_different(VNode test,Graph G ){i=text.clofor(j=0;j<G.vexnum;j++){if(G.vexlist[j].clo=i)return FALSE;}return TRUE;}void Traverse(int current=1,Graph &G,int store[]) 主要函数其流程图如下:主要思想是遍历和递归void Destroy(Graph &G){for(i=0;i<G.vexnum;i++){ArcNode *p=G.vexlist[i].firstnext,*q;while(p){q=p->arcnext;free(p);p=q;}}}函数调用关系图:四、调试分析1.本程序的主要功能是自己建立一个图,然后对图进行着色,支持的数据类型是整形,用不同的数字表示不同的颜色。

c语言地图着色问题课程设计

c语言地图着色问题课程设计

c语言地图着色问题课程设计一、课程目标知识目标:1. 让学生掌握C语言中的基本数据结构与算法,特别是图的相关概念和应用。

2. 让学生理解地图着色问题的实质,即图的顶点着色问题,并掌握其与计算机科学中的其他问题的联系。

3. 让学生掌握利用C语言解决地图着色问题的算法设计,包括但不限于回溯法、贪心算法等。

技能目标:1. 培养学生运用C语言进行问题分析、算法设计和程序编写的能力。

2. 培养学生通过调试和优化程序来提高问题解决效率的技能。

3. 培养学生运用逻辑思维和数学方法解决实际问题的能力。

情感态度价值观目标:1. 培养学生对计算机科学的兴趣,特别是对算法和程序设计的热情。

2. 增强学生的团队合作意识,通过小组讨论和协作完成复杂问题的解决。

3. 引导学生认识到编程解决问题的实际意义,理解计算机技术在国家和社会发展中的重要作用。

课程性质分析:本课程设计属于高中信息技术课程中的编程模块,以C语言为载体,着重于算法思维和问题解决能力的培养。

学生特点分析:高中生在逻辑思维和抽象思维方面有较好的发展,能够理解较为复杂的问题和算法。

他们对新鲜事物充满好奇,但需要通过具体案例和实践活动来加深理解。

教学要求:1. 教学内容与课本紧密结合,注重理论与实践相结合。

2. 教学过程中要注重启发式教学,引导学生主动探索和思考。

3. 教学评价应关注学生在知识掌握、技能应用和情感态度方面的综合表现。

二、教学内容1. 图的基本概念:图的结构定义,图的分类(有向图与无向图,连通图与非连通图),图的表示方法(邻接矩阵和邻接表)。

2. 地图着色问题背景知识:介绍地图着色问题的实际意义,分析其与图论中的顶点着色问题的联系。

3. 算法原理:- 回溯法:介绍回溯法的基本思想,解决地图着色问题的应用。

- 贪心算法:讲述贪心算法的设计思路,及其在地图着色问题中的运用。

4. C语言实现:- 编写图的表示结构体和基本操作函数。

- 实现回溯法和贪心算法解决地图着色问题的C程序。

地图着色问题c语言课程设计

地图着色问题c语言课程设计

地图着色问题c语言课程设计一、课程目标知识目标:1. 理解地图着色问题的基本概念,掌握其数学模型及相关算法。

2. 掌握C语言中数组、循环、条件判断等基本语法结构,并能将其应用于解决地图着色问题。

3. 了解贪心算法、回溯算法等基本算法在地图着色问题中的应用。

技能目标:1. 能够运用C语言编写解决地图着色问题的程序,具备一定的编程实践能力。

2. 能够通过分析地图着色问题,设计合适的算法,培养问题解决和算法设计能力。

3. 能够运用所学知识解决类似地图着色问题的实际应用,具备一定的知识迁移能力。

情感态度价值观目标:1. 培养学生面对问题积极思考、主动探究的学习态度,增强自信心和自主学习能力。

2. 培养学生团队合作意识,学会在团队中沟通、协作、共同解决问题。

3. 激发学生对计算机科学的兴趣,认识计算机编程在解决实际问题中的价值。

课程性质:本课程为实践性较强的课程,以项目为导向,注重培养学生的编程实践能力和问题解决能力。

学生特点:学生具备一定的C语言基础,了解基本语法结构,但对算法设计和实际应用尚不熟悉。

教学要求:通过讲解、示范、实践等多种教学手段,使学生掌握地图着色问题的相关知识,培养其编程实践能力和问题解决能力。

同时,关注学生情感态度的培养,激发学习兴趣,提高自主学习能力。

在教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 地图着色问题基础知识:- 图的基本概念和表示方法- 地图着色的数学模型- 地图着色问题的实际意义和应用2. C语言基础语法复习:- 数组的使用- 循环结构(for、while)- 条件判断(if、else)3. 算法设计与分析:- 贪心算法原理及在地图着色问题中的应用- 回溯算法原理及在地图着色问题中的应用- 算法复杂度分析4. 编程实践:- 使用C语言实现地图着色问题求解- 调试与优化程序- 团队合作完成项目任务5. 教学进度安排:- 第一周:地图着色问题基础知识、C语言语法复习- 第二周:贪心算法、回溯算法原理讲解及案例分析- 第三周:编程实践,团队协作完成地图着色问题求解- 第四周:项目展示、点评、总结教学内容参考教材相关章节,结合课程目标进行组织,保证教学内容科学性和系统性。

数据结构程序设计题目共29题

数据结构程序设计题目共29题

目录题目1:设计一元多项式简单计算 (1)题目2:链表应用1 (1)题目3:链表应用2 (1)题目4:通讯录 (2)题目5:停车场管理系统................................................ 错误!未定义书签。

题目6:约瑟夫环 (3)题目7:运动会分数统计 (3)题目8:文学研究助手问题 (3)题目9:银行业务模拟与离散事件模拟 (4)题目10:学生信息管理系统任务(用顺序表/链表)....... 错误!未定义书签。

题目11:文章编辑功能 ................................................. 错误!未定义书签。

题目12:实验室管理..................................................... 错误!未定义书签。

题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).. (4)题目14:纸牌游戏任务 (5)题目15:算术表达式求值 (5)题目16:内部排序算法比较 (5)题目17:哈夫曼树的构造和哈夫曼编码/译码 (6)题目18:构造可以使n个城市连接的最小生成树 (7)题目19:交通咨询系统中的最短路径 (7)题目20:集合的交、并、差运算 ................................... 错误!未定义书签。

题目21:长整数四则运算 (7)题目22:机订票系统..................................................... 错误!未定义书签。

题目23:图书管理系统 (8)题目24:哈希表应用 (8)题目25:模拟旅馆管理系统的一个功能——床位的分配与回收 (9)题目26:地图着色问题 (9)题目27:俄罗斯套娃问题 (10)题目28:扫雷 (11)题目29:用C语言设计一个日历系统 (11)题目1:设计一元多项式计算【任务要求】(1)能够按照指数降序排列建立并输出多项式;(2)能够完成两个多项式的相加、相减,并将结果输入;实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数,如项数等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告课程设计题目:地图着色问题专业:xxxxxxxxx班级:xxxxxxxxx姓名:xxxxxxxxx一:需求分析:1)已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;2)将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系;3)演示程序以用户和计算机的对话方式进行;4)最后对结果做出简单分析。

二:概要设计一:设计思路把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。

着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。

二:数据结构设计因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以我选择的邻接表来存储。

其中:typedef struct ArcNode{int x; (表示与当前顶点所表示省份相邻的省份的位置信息)struct ArcNode *next; (指向下一个弧结点)}ArcNode; (表示省份之间相邻关系的弧结点)typedef struct{char *name; (顶点所表示的省份的名称)int color; (省份的颜色,用数字表示不同的颜色)ArcNode *firstnext; (指向第一个弧)}shengfen[35];2三:详细设计该程序一共包含三个模版:分别为初始化模版、着色模版和输出模版。

1.初始化模块声明表示省份的顶点信息、省份之间相邻关系的弧的信息,并为其赋值。

2.着色模块为各个省份着色。

for(i=1;i<=34;i++){sheng[i].color=0;}for(i=1;i<=34;i++){j=1;p=sheng[i].firstnext;while(p!=NULL){while(p!=NULL&&j!=sheng[p->x].color){p=p->next;}if(p!=NULL)j++;}sheng[i].color=j;}3.输出模块输出各个省份的颜色信息。

for(i=1;i<=34;i++){printf(%s:,sheng[i].name);printf(%d\n,sheng[i].color);}printf(\/n0表示白色,1表示蓝色,2表示红色,3表示绿色,4表示黄色); return 0;3四:调试分析因为我们的程序已知是中国地图,为中国地图染色,所以程序没有输入,只有输出信息。

从输出的信息来看,我们最多使用了4种颜色。

关于程序测试时存在的问题,我们程序在写完之后,出现了没有错误但是无法输出信息的问题,从网上查找发现是对警告没处理好的原因,随后我们参考了网上的解决方案把问题解决了。

关于程序的改进,我们的程序使用的是有向图,但省份之间的相邻关系用无向图就可以表示,这是程序可以改进的地方。

其次,我们的程序输出结果描述省份颜色的是数字,也可以改进后使之输出具体的颜色。

4五:源程序清单#include <stdio.h>#include <stdlib.h>typedef struct ArcNode{int x;struct ArcNode *next;}ArcNode;typedef struct{char *name;int color;ArcNode *firstnext;}shengfen[35];int main(){shengfen sheng;int i,j;ArcNode*p,*hu1,*hu2,*hu3,*hu4,*hu5,*hu6,*hu7,*hu8,*hu9,*hu10,*hu11,*hu12,*hu13,*hu1 4,*hu15,*hu16,*hu17,*hu18;ArcNode*hu19,*hu20,*hu21,*hu22,*hu23,*hu24,*hu25,*hu26,*hu27,*hu28,*hu29,*hu30,*hu 31,*hu32,*hu33,*hu34,*hu35;ArcNode*hu36,*hu37,*hu38,*hu39,*hu40,*hu41,*hu42,*hu43,*hu44,*hu45,*hu46,*hu47,*hu 48,*hu49,*hu50,*hu51,*hu52;ArcNode*hu53,*hu54,*hu55,*hu56,*hu57,*hu58,*hu59,*hu60,*hu61,*hu62,*hu63,*hu64,*hu 65,*hu66;ArcNode*hu67,*hu68,*hu69,*hu70,*hu71,*hu72,*hu73,*hu74,*hu75,*hu76,*hu77,*hu78,*hu 79,*hu80,*hu81,*hu82,*hu83,*hu84;ArcNode*hu85,*hu86,*hu87,*hu88,*hu89,*hu90,*hu91,*hu92,*hu93,*hu94,*hu95,*hu96,*hu 97,*hu98,*hu99,*hu100;ArcNode*hu101,*hu102,*hu103,*hu104,*hu105,*hu106,*hu107,*hu108,*hu109,*hu110,*hu1 11,*hu112,*hu113,*hu114,*hu115,*hu116,*hu117;ArcNode*hu118,*hu119,*hu120,*hu121,*hu122,*hu123,*hu124,*hu125,*hu126,*hu127,*hu1 28,*hu129;ArcNode*hu130,*hu131,*hu132,*hu133,*hu134,*hu135,*hu136,*hu137,*hu138,*hu139,*hu1 540,*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));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)); 6hu44=(ArcNode *)malloc(sizeof(ArcNode)); hu45=(ArcNode *)malloc(sizeof(ArcNode)); hu46=(ArcNode *)malloc(sizeof(ArcNode)); hu47=(ArcNode *)malloc(sizeof(ArcNode)); hu48=(ArcNode *)malloc(sizeof(ArcNode)); hu49=(ArcNode *)malloc(sizeof(ArcNode)); hu50=(ArcNode *)malloc(sizeof(ArcNode)); hu51=(ArcNode *)malloc(sizeof(ArcNode)); hu52=(ArcNode *)malloc(sizeof(ArcNode)); hu53=(ArcNode *)malloc(sizeof(ArcNode)); hu54=(ArcNode *)malloc(sizeof(ArcNode)); hu55=(ArcNode *)malloc(sizeof(ArcNode)); hu56=(ArcNode *)malloc(sizeof(ArcNode)); hu57=(ArcNode *)malloc(sizeof(ArcNode)); hu58=(ArcNode *)malloc(sizeof(ArcNode)); hu59=(ArcNode *)malloc(sizeof(ArcNode)); hu60=(ArcNode *)malloc(sizeof(ArcNode)); hu61=(ArcNode *)malloc(sizeof(ArcNode)); hu62=(ArcNode *)malloc(sizeof(ArcNode)); hu63=(ArcNode *)malloc(sizeof(ArcNode)); hu64=(ArcNode *)malloc(sizeof(ArcNode)); hu65=(ArcNode *)malloc(sizeof(ArcNode)); hu66=(ArcNode *)malloc(sizeof(ArcNode)); hu67=(ArcNode *)malloc(sizeof(ArcNode)); hu68=(ArcNode *)malloc(sizeof(ArcNode)); hu69=(ArcNode *)malloc(sizeof(ArcNode)); hu70=(ArcNode *)malloc(sizeof(ArcNode)); hu71=(ArcNode *)malloc(sizeof(ArcNode)); hu72=(ArcNode *)malloc(sizeof(ArcNode)); hu73=(ArcNode *)malloc(sizeof(ArcNode)); hu74=(ArcNode *)malloc(sizeof(ArcNode)); hu75=(ArcNode *)malloc(sizeof(ArcNode)); hu76=(ArcNode *)malloc(sizeof(ArcNode));hu78=(ArcNode *)malloc(sizeof(ArcNode)); hu79=(ArcNode *)malloc(sizeof(ArcNode)); hu80=(ArcNode *)malloc(sizeof(ArcNode)); hu81=(ArcNode *)malloc(sizeof(ArcNode)); hu82=(ArcNode *)malloc(sizeof(ArcNode)); hu83=(ArcNode *)malloc(sizeof(ArcNode)); hu84=(ArcNode *)malloc(sizeof(ArcNode)); hu85=(ArcNode *)malloc(sizeof(ArcNode)); hu86=(ArcNode *)malloc(sizeof(ArcNode)); hu87=(ArcNode *)malloc(sizeof(ArcNode)); 7hu88=(ArcNode *)malloc(sizeof(ArcNode)); hu89=(ArcNode *)malloc(sizeof(ArcNode)); hu90=(ArcNode *)malloc(sizeof(ArcNode)); hu91=(ArcNode *)malloc(sizeof(ArcNode)); hu92=(ArcNode *)malloc(sizeof(ArcNode)); hu93=(ArcNode *)malloc(sizeof(ArcNode)); hu94=(ArcNode *)malloc(sizeof(ArcNode)); hu95=(ArcNode *)malloc(sizeof(ArcNode)); hu96=(ArcNode *)malloc(sizeof(ArcNode)); hu97=(ArcNode *)malloc(sizeof(ArcNode)); hu98=(ArcNode *)malloc(sizeof(ArcNode)); hu99=(ArcNode *)malloc(sizeof(ArcNode)); hu100=(ArcNode *)malloc(sizeof(ArcNode)); hu101=(ArcNode *)malloc(sizeof(ArcNode)); hu102=(ArcNode *)malloc(sizeof(ArcNode)); hu103=(ArcNode *)malloc(sizeof(ArcNode)); hu104=(ArcNode *)malloc(sizeof(ArcNode)); hu105=(ArcNode *)malloc(sizeof(ArcNode)); hu106=(ArcNode *)malloc(sizeof(ArcNode)); hu107=(ArcNode *)malloc(sizeof(ArcNode)); hu108=(ArcNode *)malloc(sizeof(ArcNode)); hu109=(ArcNode *)malloc(sizeof(ArcNode)); hu110=(ArcNode *)malloc(sizeof(ArcNode)); hu111=(ArcNode *)malloc(sizeof(ArcNode)); hu112=(ArcNode *)malloc(sizeof(ArcNode)); hu113=(ArcNode *)malloc(sizeof(ArcNode)); hu114=(ArcNode *)malloc(sizeof(ArcNode)); hu115=(ArcNode *)malloc(sizeof(ArcNode)); hu116=(ArcNode *)malloc(sizeof(ArcNode)); hu117=(ArcNode *)malloc(sizeof(ArcNode)); hu118=(ArcNode *)malloc(sizeof(ArcNode));hu120=(ArcNode *)malloc(sizeof(ArcNode)); hu121=(ArcNode *)malloc(sizeof(ArcNode)); hu122=(ArcNode *)malloc(sizeof(ArcNode)); hu123=(ArcNode *)malloc(sizeof(ArcNode)); hu124=(ArcNode *)malloc(sizeof(ArcNode)); hu125=(ArcNode *)malloc(sizeof(ArcNode)); hu126=(ArcNode *)malloc(sizeof(ArcNode)); hu127=(ArcNode *)malloc(sizeof(ArcNode)); hu128=(ArcNode *)malloc(sizeof(ArcNode)); hu129=(ArcNode *)malloc(sizeof(ArcNode)); hu130=(ArcNode *)malloc(sizeof(ArcNode)); hu131=(ArcNode *)malloc(sizeof(ArcNode)); 8hu132=(ArcNode *)malloc(sizeof(ArcNode)); hu133=(ArcNode *)malloc(sizeof(ArcNode)); hu134=(ArcNode *)malloc(sizeof(ArcNode)); hu135=(ArcNode *)malloc(sizeof(ArcNode)); hu136=(ArcNode *)malloc(sizeof(ArcNode)); hu137=(ArcNode *)malloc(sizeof(ArcNode)); hu138=(ArcNode *)malloc(sizeof(ArcNode)); hu139=(ArcNode *)malloc(sizeof(ArcNode)); hu140=(ArcNode *)malloc(sizeof(ArcNode)); hu141=(ArcNode *)malloc(sizeof(ArcNode)); hu142=(ArcNode *)malloc(sizeof(ArcNode)); sheng[1].name=heilongjiang;hu1->x=2;hu2->x=4;sheng[1].firstnext=hu1;hu1->next=hu2;hu2->next=NULL;sheng[2].name=jilin;hu3->x=4;hu4->x=3;hu141->x=1;sheng[2].firstnext=hu3;hu3->next=hu4;hu4->next=hu141;hu141->next=NULL;sheng[3].name=liaoning;hu5->x=4;hu6->x=10;hu142->x=2;sheng[3].firstnext=hu5;hu5->next=hu6;hu6->next=hu142;hu142->next=NULL;sheng[4].name= eimenggu;hu7->x=1;hu8->x=2;hu9->x=3;hu10->x=10;hu11->x=9;hu12->x=8;hu13->x=7;hu14->x=6;hu15->x=5;sheng[4].firstnext=hu7;9hu7->next=hu8;hu8->next=hu9;hu9->next=hu10;hu10->next=hu11;hu11->next=hu12;hu12->next=hu13;hu13->next=hu14;hu14->next=hu15;hu15->next=NULL;桳湥孧崵渮浡?硜湩楪湡屧※hu16->x=6;hu17->x=13;hu18->x=16;sheng[5].firstnext=hu16;hu16->next=hu17;hu17->next=hu18;hu18->next=NULL;sheng[6].name=gansu;hu19->x=4;hu20->x=7;hu21->x=8;hu22->x=17;hu23->x=13;hu24->x=5;sheng[6].firstnext=hu19;hu19->next=hu20;hu20->next=hu21;hu21->next=hu22;hu22->next=hu23;hu23->next=hu24;hu24->next=NULL; sheng[7].name= ingxia;hu25->x=4;hu26->x=8;hu27->x=6;sheng[7].firstnext=hu25; hu25->next=hu26;hu26->next=hu27;hu27->next=NULL; sheng[8].name=shanxi1; hu28->x=4;hu29->x=9;hu30->x=14;hu31->x=19;10hu32->x=18;hu33->x=17;hu34->x=6;hu35->x=7;sheng[8].firstnext=hu28; hu28->next=hu29;hu29->next=hu30;hu30->next=hu31;hu31->next=hu32;hu32->next=hu33;hu33->next=hu34;hu34->next=hu35;hu35->next=NULL; sheng[9].name=shanxi2; hu36->x=4;hu37->x=10;hu38->x=14;hu39->x=8;sheng[9].firstnext=hu36; hu36->next=hu37;hu37->next=hu38;hu38->next=hu39;hu39->next=NULL;sheng[10].name=hebei; hu40->x=4;hu41->x=3;hu42->x=11;hu43->x=12;hu44->x=15;hu45->x=14;hu46->x=9;sheng[10].firstnext=hu40; hu40->next=hu41;hu41->next=hu42;hu42->next=hu43;hu43->next=hu44;hu44->next=hu45;hu45->next=hu46;hu46->next=NULL; sheng[11].name=eijing; hu47->x=10;sheng[11].firstnext=hu47; hu47->next=NULL; sheng[12].name=ianjin;11hu48->x=10;sheng[12].firstnext=hu48; hu48->next=NULL; sheng[13].name=qinghai; hu49->x=5;hu50->x=6;hu51->x=17;hu52->x=16;sheng[13].firstnext=hu49; hu49->next=hu50;hu50->next=hu51;hu51->next=hu52;hu52->next=NULL; sheng[14].name=henan; hu53->x=9;hu54->x=10;hu55->x=15;hu56->x=21;hu57->x=20;hu58->x=19;hu59->x=8;sheng[14].firstnext=hu53; hu53->next=hu54;hu54->next=hu55;hu55->next=hu56;hu56->next=hu57;hu57->next=hu58;hu58->next=hu59;hu59->next=NULL; sheng[15].name=shandong; hu60->x=10;hu61->x=14;hu62->x=21;sheng[15].firstnext=hu60; hu60->next=hu61;hu61->next=hu62;hu62->next=NULL;桳湥孧??慮敭尽楸慺杮? hu63->x=5;hu64->x=13;hu65->x=17;hu66->x=23;sheng[16].firstnext=hu63; hu63->next=hu64;12hu64->next=hu65;hu65->next=hu66;hu66->next=NULL; sheng[17].name=sichuan; hu67->x=13;hu68->x=6;hu69->x=8;hu70->x=18;hu71->x=24;hu72->x=23;hu73->x=16;sheng[17].firstnext=hu67; hu67->next=hu68;hu68->next=hu69;hu69->next=hu70;hu70->next=hu71;hu71->next=hu72;hu72->next=hu73;hu73->next=NULL; sheng[18].name=chongqing; hu74->x=17;hu75->x=8;hu76->x=19;hu77->x=25;hu78->x=24;sheng[18].firstnext=hu74; hu74->next=hu75;hu75->next=hu76;hu76->next=hu77;hu77->next=hu78;hu78->next=NULL; sheng[19].name=hubei;hu79->x=8;hu80->x=14;hu81->x=20;hu82->x=26;hu83->x=25;hu84->x=18;sheng[19].firstnext=hu79; hu79->next=hu80;hu80->next=hu81;hu81->next=hu82;hu82->next=hu83;hu83->next=hu84;13hu84->next=NULL;sheng[20].name=anhui;hu85->x=14;hu86->x=21;hu87->x=27;hu88->x=26;hu89->x=19;sheng[20].firstnext=hu85; hu85->next=hu86;hu86->next=hu87;hu87->next=hu88;hu88->next=hu89;hu89->next=NULL; sheng[21].name=jiangsu; hu90->x=15;hu92->x=20;hu93->x=27;hu94->x=22;sheng[21].firstnext=hu90; hu90->next=hu91;hu91->next=hu92;hu92->next=hu93;hu93->next=hu94;hu94->next=NULL; sheng[22].name=shanghai; hu95->x=21;hu96->x=27;sheng[22].firstnext=hu95; hu95->next=hu96;hu96->next=NULL; sheng[23].name=yunnan; hu97->x=16;hu98->x=17;hu99->x=24;hu100->x=29;sheng[23].firstnext=hu97; hu97->next=hu98;hu98->next=hu99;hu99->next=hu100;hu100->next=NULL; sheng[24].name=guizhou; hu101->x=17;hu102->x=24;14hu103->x=29;hu104->x=23;hu105->x=18;sheng[24].firstnext=hu101; hu101->next=hu102;hu102->next=hu103;hu103->next=hu104;hu104->next=hu105;hu105->next=NULL; sheng[25].name=hunan; hu106->x=18;hu107->x=19;hu108->x=26;hu110->x=29;hu111->x=24;sheng[25].firstnext=hu106; hu106->next=hu107;hu107->next=hu108;hu108->next=hu109;hu109->next=hu110;hu110->next=hu111;hu111->next=NULL; sheng[26].name=jiangxi; hu112->x=25;hu113->x=19;hu114->x=20;hu115->x=27;hu116->x=28;hu117->x=30;sheng[26].firstnext=hu112; hu112->next=hu113;hu113->next=hu114;hu114->next=hu115;hu115->next=hu116;hu116->next=hu117;hu117->next=NULL; sheng[27].name=zhejiang; hu118->x=22;hu119->x=21;hu120->x=20;hu121->x=26;hu122->x=28;sheng[27].firstnext=hu118;15hu118->next=hu119;hu119->next=hu120;hu120->next=hu121;hu121->next=hu122;hu122->next=NULL; sheng[28].name=ujian;hu123->x=27;hu124->x=26;hu125->x=30;sheng[28].firstnext=hu123;hu123->next=hu124;hu124->next=hu125;hu125->next=NULL;sheng[29].name=guangxi;hu126->x=23;hu127->x=24;hu128->x=25;hu129->x=30;sheng[29].firstnext=hu126;hu126->next=hu127;hu127->next=hu128;hu128->next=hu129;hu129->next=NULL;sheng[30].name=guangdong;hu130->x=29;hu131->x=25;hu132->x=26;hu133->x=28;hu134->x=31;hu135->x=32;hu136->x=34;sheng[30].firstnext=hu130;hu130->next=hu131;hu131->next=hu132;hu132->next=hu133;hu133->next=hu134;hu134->next=hu135;hu135->next=hu136;hu136->next=NULL;sheng[31].name=aomen;hu137->x=30;sheng[31].firstnext=hu137;hu137->next=NULL;桳湥孧社?慮敭尽楸湡杧湡屧※16hu138->x=30;sheng[32].firstnext=hu138;hu138->next=NULL;sheng[33].name=aiwan;hu139->x=28;sheng[33].firstnext=hu139;hu139->next=NULL;sheng[34].name=hainan;hu140->x=30;sheng[34].firstnext=hu140;hu140->next=NULL;for(i=1;i<=34;i++){sheng[i].color=0;}for(i=1;i<=34;i++){j=1;p=sheng[i].firstnext;while(p!=NULL){while(p!=NULL&&j!=sheng[p->x].color){p=p->next;}if(p!=NULL)j++;}sheng[i].color=j;}for(i=1;i<=34;i++){printf(%s:,sheng[i].name);printf(%d\n,sheng[i].color);}printf(\/n0表示白色,1表示蓝色,2表示红色,3表示绿色,4表示黄色); return 0;}17。

相关文档
最新文档