地图着色问题
- 格式:doc
- 大小:134.50 KB
- 文档页数:17
四色问题又称四色猜想,是世界近代三大数学难题之一。
四色问题的内容是:“任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色。
”用数学语言表示,即“将平面任意地细分为不相重迭的区域,每一个区域总可以用1,2,3,4这四个数字之一来标记,而不会使相邻的两个区域得到相同的数字。
”(右图)这里所指的相邻区域,是指有一整段边界是公共的。
如果两个区域只相遇于一点或有限多点,就不叫相邻的。
因为用相同的颜色给它们着色不会引起混淆。
四色猜想的提出来自英国。
1852年,毕业于伦敦大学的弗南西斯·格思里来到一家科研单位搞地图着色工作时,发现了一种有趣的现象:“看来,每幅地图都可以用四种颜色着色,使得有共同边界的国家都被着上不同的颜色。
”这个现象能不能从数学上加以严格证明呢?他和在大学读书的弟弟格里斯决心试一试。
兄弟二人为证明这一问题而使用的稿纸已经堆了一大叠,可是研究工作没有进展。
1852年10月23日,他的弟弟就这个问题的证明请教了他的老师、著名数学家德·摩尔根,摩尔根也没有能找到解决这个问题的途径,于是写信向自己的好友、著名数学家汉密尔顿爵士请教。
汉密尔顿接到摩尔根的信后,对四色问题进行论证。
但直到1865年汉密尔顿逝世为止,问题也没有能够解决。
1872年,英国当时最著名的数学家凯利正式向伦敦数学学会提出了这个问题,于是四色猜想成了世界数学界关注的问题。
世界上许多一流的数学家都纷纷参加了四色猜想的大会战。
1878~1880年两年间,著名的律师兼数学家肯普和泰勒两人分别提交了证明四色猜想的论文,宣布证明了四色定理,大家都认为四色猜想从此也就解决了。
肯普的证明是这样的:首先指出如果没有一个国家包围其他国家,或没有三个以上的国家相遇于一点,这种地图就说是“正规的”(左图)。
如为正规地图,否则为非正规地图(右图)。
一张地图往往是由正规地图和非正规地图联系在一起,但非正规地图所需颜色种数一般不超过正规地图所需的颜色,如果有一张需要五种颜色的地图,那就是指它的正规地图是五色的,要证明四色猜想成立,只要证明不存在一张正规五色地图就足够了。
算法设计与分析课程设计题目:地图着色问题文档:物联网工程学院物联网工程专业学号学生姓名班级二〇一三年十二月一、问题描述:地图着色问题设计要求:已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少.二、概要设计(流程图)步骤:1.已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;2.将各省进行编号,然后利用无向图的顶点之间的边来表示各省的相邻关系;3.将各编号进行逐一着色,利用循环语句遍历各省,判断语句判断是否符合要求;4.演示程序,以用户和计算机的对话方式进行;5.最后对结果做出简单分析及总结。
流程图三、源程序#include <stdio.h>#include <stdlib.h>#define MAXedg 100#define MAX 0#define N 4 /*着色的颜色数*/int color[30]={0};/*来存储对应块的对应颜色*/ typedef char vextype;typedef int adjtype;typedef struct /*定义图*/{vextype vexs[MAXedg]; /*存放边的矩阵*/adjtype arcs[MAXedg][MAXedg]; /*图的邻接矩阵*/ int vnum,arcnum; /*图的顶点数和边数*/}Graph;int LocateVex(Graph G,char u){int i;for(i=1;i<=G.vnum;i++){if(u==G.vexs[i])return i;}if(i==G.vnum){printf("Error u!\n");exit(1);}return 0;}void CreateGraph(Graph &G) /*输入图*/{int i,j,k, w;vextype v1,v2;printf("输入图的顶点数和边数:\n");scanf("%d%d",&G.vnum,&G.arcnum);getchar();printf("输入图的各顶点:\n");for(i=1;i<=G.vnum;i++){scanf("%c",&G.vexs[i]);getchar();}for(i=0;i<=G.vnum;i++)for(j=0;j<=G.vnum;j++)G.arcs[i][j]=MAX;printf("输入边的两个顶点和权值(均用1表示):\n"); for(k=0;k<G.arcnum;k++){scanf("%c", &v1);getchar();scanf("%c", &v2);getchar();scanf("%d", &w); getchar();i=LocateVex(G,v1);j=LocateVex(G,v2);G.arcs[i][j]=w;G.arcs[j][i]=w;}void PrintGraph(Graph G) /*输出图的信息*/{int i,j;printf("图的各顶点:\n");for(i=1;i<=G.vnum;i++)printf("%c ",G.vexs[i]);printf("\n");printf("图的邻接矩阵:\n");for(i=1;i<=G.vnum;i++){for(j=1;j<=G.vnum;j++)printf("%d ",G.arcs[i][j]);printf("\n");}}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为开始图色的顶点,本算法从1开始*/ {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);/*进行下一块的着色*/}}}int main(){Graph G;CreateGraph(G);PrintGraph(G);printf("着色方案:\n");trycolor(1,G);return 0;}四、运行主要结果界面贴图1、中国地图简略图2、取地图一部分进行测试有6个顶点,8条边。
世界地图为什么只有 4 种颜色?在一张世界地图上,要给相邻国家涂上不同的颜色,至少需要多少种颜色呢?答案是四种颜色。
这就是数学界非常有名的四色定理,这个最初源于给地图上国家上色的有趣问题被誉为世界近代三大数学问题之一。
数学家用了100 多年的时间才给出了真正的证明,所用的计算机证明也登上了数学舞台。
如今,在图论领域,还有许多由四色定理衍生出来的有趣问题。
例如,一个起源于收音机广播电台的问题:在一个无限大的网格纸上填入数字,同一个数字之间的“距离”必须大于这个数字本身,那么最少需要多少个数字能覆盖整个平面?年幼的你会对着书房墙面上的世界地图发呆吗?凝视着那五颜六色的图案,畅想着自己将来有一天能够环游世界。
而在 19 世纪的英国,一个古老且经典的数学问题——着色问题,就诞生于这样一份凝视。
应用四色定理填色的世界地图,图片来源:自然资源部标准地图服务系统四色问题的起源故事开始于 1852 年,英国地图制图师弗朗西斯·古特里(Francis Guthrie)在观察地图时提出了一个“给地图着色”的问题。
他发现只需要四种颜色就可以对地图进行着色,使得相邻的国家颜色不同。
但令他不解的是,这个数字“4”是否是最优的呢?于是他向他的弟弟弗雷德里克·古特里(Frederick Guthrie)及其朋友们寻求帮助。
在交流中,他们逐渐认识到这个问题与数学有着深刻的联系。
于是弗雷德里克向他的老师——伦敦大学学院的数学家奥古斯塔斯·德摩根(Augustus De Morgan)寻求帮助。
德摩根教授尝试之后也无能为力,于是写信将这个问题转交给了他的好友爱尔兰数学家威廉·哈密顿(William Hamilton)教授。
遗憾的是,充满智慧的哈密顿对这个问题并没有太大的兴趣。
摩尔根在信中写道:“一位学生今天让我说明一个事实,我们不知道它是否可作为一个事实。
他说将平面上的一个图形,任意划分成有限个部分并对其每个部分染色,使得相邻部分具有不同的颜色,而且只能用四种颜色。
地图着色问题课程设计一、课程目标知识目标:1. 理解地图着色问题的基本概念,掌握地图着色中涉及到的图论知识;2. 学会运用不同的算法解决地图着色问题,了解其优缺点;3. 掌握地图着色问题在实际生活中的应用,如行政区划、交通规划等。
技能目标:1. 能够运用所学知识,对给定的地图进行有效着色,提高解决问题的能力;2. 学会运用图论软件或工具进行地图着色的实际操作,培养动手实践能力;3. 通过团队合作,培养学生的沟通协调能力和解决问题的能力。
情感态度价值观目标:1. 激发学生对图论和地图着色问题的兴趣,培养良好的学习态度;2. 引导学生关注地图着色问题在实际生活中的应用,提高学生的社会责任感和实践意识;3. 培养学生面对复杂问题时,保持积极的心态,勇于克服困难,寻求解决问题的方法。
课程性质:本课程为数学学科选修课程,结合图论知识,以地图着色问题为载体,培养学生的逻辑思维能力和实际操作能力。
学生特点:学生处于高年级阶段,具备一定的数学基础和逻辑思维能力,对新鲜事物充满好奇心,具备一定的团队协作能力。
教学要求:注重理论与实践相结合,充分调动学生的积极性,引导学生主动参与课堂讨论和实践活动,提高学生的综合素养。
在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 图论基础知识回顾:包括图的定义、图的表示方法、顶点和边的性质等;教材章节:第一章 图的基本概念2. 地图着色问题的提出:介绍地图着色的背景、意义及应用场景;教材章节:第二章 图的着色问题3. 地图着色算法:学习并掌握贪心算法、回溯算法、遗传算法等地图着色方法;教材章节:第三章 着色问题的算法及其应用4. 地图着色问题的实际操作:运用图论软件或工具进行地图着色实践;教材章节:第四章 着色问题的实际应用5. 地图着色问题案例分析:分析生活中的地图着色问题实例,如行政区划、交通规划等;教材章节:第五章 着色问题的案例分析6. 团队合作与交流:分组讨论、分享学习心得,培养学生的团队协作和沟通能力。
地图着色的四色猜想
人人都熟悉地图,可并不是人人都知道,绘制一张地图最少要用几种颜色,才能把相邻的国家或不同的区域区分开来。
这个地图着色问题,是一个著名的数学难题,它曾经吸引了好几代优秀的数学家为之奋斗,并且从中获得了一个又一个杰出的成就,为数学的发展增添了光辉。
在地图上区分两个相邻的国家或地区,要用不同的颜色来涂这两个国家或区域。
如上图表示某个国家的省区地图,图中虚线表示各省界。
可见,用两种颜色是区分不开的,三种颜色就够了。
A、B、C三省各用一色,D省和B省用同样的颜色。
又如上图所示的地图,1,2,3,4表示四个国家。
因为这张地图的四个国家中任何两个都有公共边界,所以必须用四种颜色才能把它们区分开。
于是,有的数学家猜想,任何地图着色只需四种颜色就足够了。
正式提出地图着色问题的时间是1852年。
当时伦敦大学的一名学生法朗西斯向他的老师、著名的数学家、伦敦大学数学教授莫根提出了这个问题。
莫根无法解答,求助于其他的数学家,也没能解决。
于是,这个问题一直传下来。
直到1976年9月,《美国数学会通告》宣布了一件需撼全球数学界消息:美国伊利诺斯大学的两位教授阿贝尔和哈根,利用电子计算机证明了地图的四色猜想是正确的! 他们将地图的四色问题化为2000个特殊的图的四色问题,然后在电子计算机上计算了1200个小时,终于证明了四色问题。
数学染色法的原理和应用数学染色法的原理基于以下两个基本概念:格点平面上的点和边。
格点是指平面上相对于一些坐标系上的整数点,边是指相互连接的两个格点之间的线段。
染色是指给格点或边上为其分配一种颜色。
数学染色法的关键是在染色时,通过合理的规则和技巧,使得染色后的模型能够满足一定的性质或关系。
1.地图着色问题:在地图上,染色是指给地图上的区域(州、省、国家等)分配不同的颜色,使得相邻的区域颜色不同。
该问题可以用图论中的顶点着色问题来描述,通过将地图上的区域建立成图的顶点之间的边,然后用独立集(即不相邻的顶点)来进行着色,从而使得相邻的区域颜色不同。
2.图像分割问题:在图像处理中,染色是指将图像分成若干个区域,每个区域具有相同或相似的颜色特征。
图像分割问题可以使用图论中的连通分支问题来描述,通过将图像中的像素点建立成图的顶点,然后通过对像素点之间的连通性进行染色,将相互连接的像素点染成相同的颜色,从而实现图像的分割。
3.矩阵染色问题:在矩阵中,染色是指将矩阵中的元素进行染色,并满足一些特定的规则。
矩阵染色问题可以通过将矩阵中的元素建立成图的顶点,然后通过对图的边进行染色,使得相邻的元素颜色不同,从而实现矩阵染色的目标。
4.进程调度问题:在任务调度中,染色是指将一组任务分配给一组处理器,并满足一些限制条件。
任务调度问题可以使用图论中的图染色问题来描述,通过将任务和处理器建立成图的顶点,然后通过对图的边进行染色,使得相邻的任务在同一处理器上运行,从而实现任务调度的目标。
数学染色法的优点是可以将复杂的问题转化为数学模型,从而通过数学方法进行求解。
它可以降低问题的复杂度,简化问题的结构,使得问题求解更加直观和高效。
此外,数学染色法的应用非常广泛,不仅可以用于解决科学和工程领域中的问题,还可以用于解决生活中的实际问题,如地图着色、课程表编排、货车调度等。
总之,数学染色法是一种广泛应用于数学和计算领域的问题求解方法,通过对问题进行染色,将复杂的问题转化为数学模型,从而可以利用数学的方法和技巧解决问题。
数据结构实验报告实验一:地图着色问题班级:计算机科学与技术1班姓名学号完成日期:2015.11.16一、题目描述已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少。
二、需求分析1.已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少;2.将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系;3.演示程序以用户和计算机的对话方式进行;4.最后对结果做出简单分析。
三、概要设计把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。
着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。
结构设计:因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以选择邻接表来存储。
其中:typedef struct ArcNode{int x; // 表示与当前顶点所表示省份相邻的省份的位置信息struct ArcNode *next; // 指向下一个弧结点}ArcNode; // 表示省份之间相邻关系的弧结点typedef struct{char *name; // 顶点所表示的省份的名称int color; // 省份的颜色,用数字表示不同的颜色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表示黄色");return 0;五、调试分析因题目已知是中国地图,为中国地图染色,所以此程序没有输入,只有输出信息。
从输出的信息来看,最多使用了4种颜色。
关于程序测试时存在的问题:写完程序后,出现了没有错误但是却无法输出信息的问题,从网上查找发现是对警告没处理好的原因,随后,参考了网上的解决方案把问题解决了。
关于程序的改进:首先,此程序使用的是有向图,而省份之间的相邻关系用无向图就可以表示,这是程序可以改进的地方;其次,程序输出结果描述省份颜色的是数字,也可以改进后使之输出具体的颜色。
六、总结经过这次课程设计实验,我体会到只有保持耐心,坚持到底才有可能做好事情。
这次课程设计加强了我动手解决问题的能力,巩固和加深了对数据结构的理解,提高了综合运用课程知识的能力,培养了独立思考、深入研究、分析问题和解决问题的能力。
同时,我也明白了将理论知识与实际相结合的重要性,只有理论知识远远不够,因为在实际设计中还是会遇到不少问题,这次实验使我发现了自己很多知识漏洞,这对我今后的学习来说是一次非常宝贵的体验。
七、附录源程序文件名清单:地图着色问题.C // 主程序#include <stdio.h>#include <stdlib.h>typedef struct ArcNode{int x; // 表示与当前顶点所表示省份相邻的省份的位置信息struct ArcNode *next;}ArcNode; // 表示省份之间相邻关系的弧结点typedef struct{char *name; // 顶点所表示的省份的名称int color;ArcNode *firstnext; // 指向第一个弧}Province[35];int main(){Province province;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 40,*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));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=(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));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)); hu77=(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)); hu88=(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));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));hu119=(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));hu132=(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)); province[1].name="黑龙江";hu1->x=2;hu2->x=4;province[1].firstnext=hu1;//声名表示省份之间相邻的弧hu1->next=hu2;hu2->next=NULL;province[2].name="吉林";hu3->x=4;hu4->x=3;hu141->x=1;province[2].firstnext=hu3;hu3->next=hu4;hu4->next=hu141;hu141->next=NULL;province[3].name="辽宁"; hu5->x=4;hu6->x=10;hu142->x=2;province[3].firstnext=hu5; hu5->next=hu6;hu6->next=hu142;hu142->next=NULL; province[4].name="内蒙古"; 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;province[4].firstnext=hu7; hu7->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; province[5].name="新疆"; hu16->x=6;hu17->x=13;hu18->x=16;province[5].firstnext=hu16; hu16->next=hu17;hu17->next=hu18;hu18->next=NULL; province[6].name="甘肃"; hu19->x=4;hu20->x=7;hu21->x=8;hu22->x=17;hu23->x=13;hu24->x=5;province[6].firstnext=hu19;hu19->next=hu20;hu20->next=hu21;hu21->next=hu22;hu22->next=hu23;hu23->next=hu24;hu24->next=NULL; province[7].name="宁夏"; hu25->x=4;hu26->x=8;hu27->x=6;province[7].firstnext=hu25; hu25->next=hu26;hu26->next=hu27;hu27->next=NULL; province[8].name="陕西"; hu28->x=4;hu29->x=9;hu30->x=14;hu31->x=19;hu32->x=18;hu33->x=17;hu34->x=6;hu35->x=7;province[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; province[9].name="山西"; hu36->x=4;hu37->x=10;hu38->x=14;hu39->x=8;province[9].firstnext=hu36; hu36->next=hu37;hu37->next=hu38;hu38->next=hu39;hu39->next=NULL; province[10].name="河北"; hu40->x=4;hu41->x=3;hu42->x=11;hu43->x=12;hu44->x=15;hu45->x=14;hu46->x=9;province[10].firstnext=hu40; hu40->next=hu41;hu41->next=hu42;hu42->next=hu43;hu43->next=hu44;hu44->next=hu45;hu45->next=hu46;hu46->next=NULL; province[11].name="北京"; hu47->x=10;province[11].firstnext=hu47; hu47->next=NULL; province[12].name="天津"; hu48->x=10;province[12].firstnext=hu48; hu48->next=NULL; province[13].name="青海"; hu49->x=5;hu50->x=6;hu51->x=17;hu52->x=16;province[13].firstnext=hu49; hu49->next=hu50;hu50->next=hu51;hu51->next=hu52;hu52->next=NULL; province[14].name="河南"; hu53->x=9;hu54->x=10;hu55->x=15;hu56->x=21;hu57->x=20;hu58->x=19;hu59->x=8;province[14].firstnext=hu53; hu53->next=hu54;hu54->next=hu55;hu55->next=hu56;hu56->next=hu57;hu57->next=hu58;hu58->next=hu59;hu59->next=NULL; province[15].name="山东"; hu60->x=10;hu61->x=14;hu62->x=21;province[15].firstnext=hu60; hu60->next=hu61;hu61->next=hu62;hu62->next=NULL; province[16].name="西藏"; hu63->x=5;hu64->x=13;hu65->x=17;hu66->x=23;province[16].firstnext=hu63; hu63->next=hu64;hu64->next=hu65;hu65->next=hu66;hu66->next=NULL; province[17].name="四川"; hu67->x=13;hu68->x=6;hu69->x=8;hu70->x=18;hu71->x=24;hu72->x=23;hu73->x=16;province[17].firstnext=hu67; hu67->next=hu68;hu68->next=hu69;hu69->next=hu70;hu70->next=hu71;hu71->next=hu72;hu72->next=hu73;hu73->next=NULL; province[18].name="重庆"; hu74->x=17;hu75->x=8;hu76->x=19;hu77->x=25;hu78->x=24;hu74->next=hu75;hu75->next=hu76;hu76->next=hu77;hu77->next=hu78;hu78->next=NULL; province[19].name="湖北"; hu79->x=8;hu80->x=14;hu81->x=20;hu82->x=26;hu83->x=25;hu84->x=18;province[19].firstnext=hu79; hu79->next=hu80;hu80->next=hu81;hu81->next=hu82;hu82->next=hu83;hu83->next=hu84;hu84->next=NULL; province[20].name="安徽"; hu85->x=14;hu86->x=21;hu87->x=27;hu88->x=26;hu89->x=19;province[20].firstnext=hu85; hu85->next=hu86;hu86->next=hu87;hu87->next=hu88;hu88->next=hu89;hu89->next=NULL; province[21].name="江苏"; hu90->x=15;hu91->x=14;hu92->x=20;hu93->x=27;hu94->x=22;province[21].firstnext=hu90; hu90->next=hu91;hu91->next=hu92;hu92->next=hu93;hu93->next=hu94;hu94->next=NULL;hu95->x=21;hu96->x=27;province[22].firstnext=hu95; hu95->next=hu96;hu96->next=NULL; province[23].name="云南"; hu97->x=16;hu98->x=17;hu99->x=24;hu100->x=29;province[23].firstnext=hu97; hu97->next=hu98;hu98->next=hu99;hu99->next=hu100;hu100->next=NULL; province[24].name="贵州"; hu101->x=17;hu102->x=24;hu103->x=29;hu104->x=23;hu105->x=18;province[24].firstnext=hu101; hu101->next=hu102;hu102->next=hu103;hu103->next=hu104;hu104->next=hu105;hu105->next=NULL; province[25].name="湖南"; hu106->x=18;hu107->x=19;hu108->x=26;hu109->x=30;hu110->x=29;hu111->x=24;province[25].firstnext=hu106; hu106->next=hu107;hu107->next=hu108;hu108->next=hu109;hu109->next=hu110;hu110->next=hu111;hu111->next=NULL; province[26].name="江西"; hu112->x=25;hu114->x=20;hu115->x=27;hu116->x=28;hu117->x=30;province[26].firstnext=hu112; hu112->next=hu113;hu113->next=hu114;hu114->next=hu115;hu115->next=hu116;hu116->next=hu117;hu117->next=NULL; province[27].name="浙江"; hu118->x=22;hu119->x=21;hu120->x=20;hu121->x=26;hu122->x=28;province[27].firstnext=hu118; hu118->next=hu119;hu119->next=hu120;hu120->next=hu121;hu121->next=hu122;hu122->next=NULL; province[28].name="福建"; hu123->x=27;hu124->x=26;hu125->x=30;province[28].firstnext=hu123; hu123->next=hu124;hu124->next=hu125;hu125->next=NULL; province[29].name="广西"; hu126->x=23;hu127->x=24;hu128->x=25;hu129->x=30;province[29].firstnext=hu126; hu126->next=hu127;hu127->next=hu128;hu128->next=hu129;hu129->next=NULL; province[30].name="广东"; hu130->x=29;hu132->x=26;hu133->x=28;hu134->x=31;hu135->x=32;hu136->x=34;province[30].firstnext=hu130;hu130->next=hu131;hu131->next=hu132;hu132->next=hu133;hu133->next=hu134;hu134->next=hu135;hu135->next=hu136;hu136->next=NULL;province[31].name="澳门";hu137->x=30;province[31].firstnext=hu137;hu137->next=NULL;province[32].name="香港";hu138->x=30;province[32].firstnext=hu138;hu138->next=NULL;province[33].name="台湾";hu139->x=28;province[33].firstnext=hu139;hu139->next=NULL;province[34].name="海南";hu140->x=30;province[34].firstnext=hu140;hu140->next=NULL;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;}//分别为各省份着色for(i=1;i<=34;i++){printf("%s:",province[i].name);printf("%d\n",province[i].color);}//输出各省份颜色信息printf("/n0表示白色,1表示蓝色,2表示红色,3表示绿色,4表示黄色"); return 0;}。