地图着色问题
四色问题又称四色猜想,是世界近代三大数学难题之一

四色问题又称四色猜想,是世界近代三大数学难题之一。
四色问题的内容是:“任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色。
”用数学语言表示,即“将平面任意地细分为不相重迭的区域,每一个区域总可以用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 种颜色?

世界地图为什么只有 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. 团队合作与交流:分组讨论、分享学习心得,培养学生的团队协作和沟通能力。
图的着色问题

问题来源
图的着色
通常所说的着色问题是指下述两类问题: 通常所说的着色问题是指下述两类问题: 1.给定无环图G=(V,E),用m种颜色为图中 的每条边着色,要求每条边着一种颜色, 的每条边着色,要求每条边着一种颜色,并 使相邻两条边有着不同的颜色, 使相邻两条边有着不同的颜色,这个问题称 为图的边着色问题。 为图的边着色问题。 2.给定无向图G=(V,E),用m种颜色为图中 的每个顶点着色,要求每个顶点着一种颜色, 的每个顶点着色,要求每个顶点着一种颜色, 并使相邻两顶点之间有着不同的颜色, 并使相邻两顶点之间有着不同的颜色,这个 问题称为图的顶着色问题。 问题称为图的顶着色问题。
化简得
( a + bd )(b + aceg )(c + bdef )( d + aceg )(e + bcdf )( f + ceg )( g + bdf )
求极小覆盖法- 求极小覆盖法-布尔代数法
Step3:从中挑选所用极大独立集个数最小者, Step3:从中挑选所用极大独立集个数最小者, 即为X 即为X(G) 但上述子集的颜色数都不是X ),正确的应 但上述子集的颜色数都不是X(G),正确的应 该是X =3,该子集为: {b,d,f}中的 该是X(G)=3,该子集为:给{b,d,f}中的 b,d,f涂颜色 涂颜色1 {a,e,g}中a,e,g涂颜色 涂颜色2 b,d,f涂颜色1,为{a,e,g}中a,e,g涂颜色2为 {a,c,g}中的 涂颜色3 中的c {a,c,g}中的c涂颜色3。 由此可见, 由此可见,求色数其需要求极大独立集以 及一切若干极大独立集的和含所有顶点的子 对于大图, 集,对于大图,因为图计算量过大而成为实 际上难以凑效的算法,所以不是一个好算法, 际上难以凑效的算法,所以不是一个好算法, 一般我们采用贪心法等近似算法来求解 。
地图着色的四色猜想

地图着色的四色猜想
人人都熟悉地图,可并不是人人都知道,绘制一张地图最少要用几种颜色,才能把相邻的国家或不同的区域区分开来。
这个地图着色问题,是一个著名的数学难题,它曾经吸引了好几代优秀的数学家为之奋斗,并且从中获得了一个又一个杰出的成就,为数学的发展增添了光辉。
在地图上区分两个相邻的国家或地区,要用不同的颜色来涂这两个国家或区域。
如上图表示某个国家的省区地图,图中虚线表示各省界。
可见,用两种颜色是区分不开的,三种颜色就够了。
A、B、C三省各用一色,D省和B省用同样的颜色。
又如上图所示的地图,1,2,3,4表示四个国家。
因为这张地图的四个国家中任何两个都有公共边界,所以必须用四种颜色才能把它们区分开。
于是,有的数学家猜想,任何地图着色只需四种颜色就足够了。
正式提出地图着色问题的时间是1852年。
当时伦敦大学的一名学生法朗西斯向他的老师、著名的数学家、伦敦大学数学教授莫根提出了这个问题。
莫根无法解答,求助于其他的数学家,也没能解决。
于是,这个问题一直传下来。
直到1976年9月,《美国数学会通告》宣布了一件需撼全球数学界消息:美国伊利诺斯大学的两位教授阿贝尔和哈根,利用电子计算机证明了地图的四色猜想是正确的! 他们将地图的四色问题化为2000个特殊的图的四色问题,然后在电子计算机上计算了1200个小时,终于证明了四色问题。
实验四 回溯法(图着色问题)

01 234 001 1 01 1 1 01 01 21 1 01 0 3001 01 41 1 01 0
class MGraph { public:
MGraph(int v,int s); void mColoring(int m,int *x); //一维数组x,存放1~n个顶点的颜色 ~MGraph(); private: void NextValue(int k,int m,int *x); void mColoring (int k,int m,int *x); int **a; //二维数组a,存储图的邻接矩阵 int n,e; //n表示图的顶点数,e表示边数 };
无向图G
【实验内容与要求】
图的着色问题:设G=(V,E)是一连通无向图,有3 种颜色,用这些颜色为G的各顶点着色,每个顶点着 一种颜色,且相邻顶点颜色不同。试用回溯法设计一 个算法,找出所有可能满足上述条件的着色法。
无向图G
无向图G
对应这个无向图的状态空间树应该是怎样的?
是一个完全3叉树,共6层
实验四 回溯法 — 图的着色问题
图的着色问题是由地图的着色问题引申而来的: 用m种颜色为地图着色,使得地图上的每一个 区域着一种颜色,且相邻区域颜色不同。
问题处理:如果把每一个区域收缩为一个顶点, 把相邻两个区域用一条边相连接,就可以把一
个区域图抽象为一个平面图。
地图(map)中地区的相邻关系,在图(graph )中用边表示。
//若(i, j)是图的边,且相邻结点k和j颜色相同 //发生冲突,选下一种颜色
if (j==k) return; //成功选择一种颜色返回 }while (1); //循环尝试颜色 }
运行结果:
图的着色问题

? 布尔恒等式
aa=a
?
a+a=a
? ? 如:
(ab ? bc)(a ? bd) ? aba ? abbd ? abc+a ?abbcb=da
? ab ? abd ? bcd ? bca ? bcd
? ab ? bcd
求极小覆盖法-布尔代数法
? 例1:求图12-2G的顶色数 解: ? Step1:求极大独立集
(可能有空的)独立集的一个分类(V1,V2,…,Vk)。当G有一个正常
k顶点着色时,就成G是k顶点可着色的。 ? G的色数X(G)是指G为k可着色的k的最小值,若X(G)=k,则称G
是k色的。 ? 事实上,如果我们将同色的顶点列入一个顶点子集,那么求X(G)
就转为求满足下列条件的最少子集数k: (1)两两子集中的顶点不同; (2)子集中的两两顶点不相邻。 显然有: (i)若G为平凡图,则X(G)=1;
问题来源
图的着色
? 通常所说的着色问题是指下述两类问题:
? 1.给定无环图G=(V,E),用m种颜色为图中
的每条边着色,要求每条边着一种颜色,并 使相邻两条边有着不同的颜色,这个问题称 为图的边着色问题。
? 2.给定无向图G=(V,E),用m种颜色为图中
的每个顶点着色,要求每个顶点着一种颜色 ,并使相邻两顶点之间有着不同的颜色,这 个问题称为图的顶着色问题。
穷举法-Welch Powell着色法
? I.将图G中的结点按度数的递减顺序进行排列 (
? 极小覆盖:极大独立集的补集称为极小覆盖。 V的子集K是G的极小覆盖当且仅当:对于每个顶 点v或者v属于K,或者v的所有邻点属于 K(但两 者不同时成立) 。
顶点着色-基本概念
? K可着色:G的一个k顶点着色是指k种颜色1,2,…,k对于G各顶点的 一个分配,如果任意两个相邻顶点都分配到不同的颜色,则称着色 是正常的。换句话说,无环图G的一个正常k顶点着色是把V分成k个
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告实验一:地图着色问题班级:计算机科学与技术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;}。