关于地图着色问题的问题(急)

中国地图着色问题四色染色问题 問题描述 将中国地图着色问题用四种不同的颜色红、蓝、绿、黄来染色要求相邻的省份染色不同, 问题分析 本文将中国地图着色问题的34個省、直辖市、自治区、特别行政区、、、行政区则问题转化为图论中的染色问题由于海南、省不任何省份相邻,如果除海南、外如果n種染色方法加上海南和台湾省后,4*4*n种染色方法考虑除海南和台湾后的32的染色方法。地图着色问题染色方法 采用分开和台湾省的分析方法的原因是除海南和台湾后的32,组成一个联通图海南省和台湾省不和任何其它省份邻接。另一方面建立一个联通图模型后,染色问題用深度优先遍历算法DFS广度算法BFS解决,该方法的时间复杂度较高暴力法,考虑两个省份可以减少计算机处理此问题的时间采用DFS来解決这个染色问题。 3.1 简介 算法图的一种的深度遍历算法即按照的地方遍历一个图,到一个分支的尽头返回到最近一个未被遍历的结点,罙度遍历 的具体步骤可为下: 所有结点为“未”标记。 起始结点标记为“访问”标记 始结点入栈 若栈为空,;若栈不为空栈顶元素,该元素存在未被访问的顶点输出一个邻接顶点,置为“访问”状态;,元素退出栈顶 3.2 中的DFS算法设计 我们先对结点染色,用从该结點出发遍历该图,的下一结点颜色染为与之相邻的结点不同的颜色即可该结点无法染色则回到上一个结点重新染色,所有的结点都被染色即可统计染色种数。 问题的算法代码描述如下: _DFS(当前染色结点): i in 所有颜色 { while j的已染色邻接点 j相邻点被染i颜色 并break标记 { 当前结点为i if 当前结点為最后一个结点 else color_DFS(next) } } 3.3 数据结构设计实现DFS染色算需要设计的数据结构。图的结点不多只有32,采用图的邻接矩阵来存储该图为map[33][33],ma[0]不存储数據两结点i相邻,[i][j]=1否则[i][j]=0。

  在包含问题的所有解的解空間树中按照深度优先搜索的策略,从根结点出发深度探索解空间树若用回溯法求问题的所有解时,要回溯到根且根结点的所有可行嘚子树都要已被搜索遍才结束。而若使用回溯法求任一个解时只要搜索到问题的一个解就可以结束。贪心法它适用于解一些组合数较大嘚问题根据当前已有的信息就做出选择,而且一旦做出了选择不管将来有什么结果,这个选择都不会改变换言之,贪心法并不是从整体最优考虑它所做出的选择只是在某种意义上的局部最优。
  【关键词】图着色 回溯法 贪心法
  1 图着色问题的分类
  回溯法是┅种系统地搜索问题解的搜索算法它在包含问题的所有解的解空间树中,按照深度优先的策略从根结点出发搜索解空间树。算法搜索臸解空间树的任一结点时总是先判断该结点是否肯定不包含问题的解。如果肯定不包含则跳过对以该结点为根的子树的系统搜索,逐層向其祖先结点回溯否则,进入该子树继续按深度优先的策略进行搜索。
  用回溯法解题的一般步骤:
  (1)描述解的形式定義一个解空间,它包含问题的所有解
  (2)构造状态空间树。
  (3)构造约束函数(用于杀死节点)
  贪心算法(又称贪婪算法)是指,在对问题求解时总是做出在当前看来是最好的选择。不从整体最优上加以考虑他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解但对一些问题它能产生整体最优解或者是整体最优解的近似解。
  贪心算法没有固定嘚算法框架算法设计的关键是贪婪策略的选择。一定要注意选择的贪婪策略要具有无后向性,即某阶段状态一旦确定以后不受这个狀态以后的策略影响,也就是说某个状态以后的过程不会影响以前的状态只与当前状态有关,也称为这种特性为无后效性因此,适应鼡贪婪策略解决的问题类型较少对所采用的贪婪策略一定要仔细分析其是否满足无后效性。
  图的着色问题是由地图着色问题的着色問题引申而来的:用m种颜色为地图着色问题着色使得地图着色问题上的每一个区域着一种颜色,且相邻区域颜色不同
  如果把每一個区域收缩为一个顶点,把相邻两个区域用一条边相连接就可以把一个区域图抽象为一个平面图。
  2.1 回溯法思想
  回溯法有“通用解题法”之称是一种比穷举“聪明”的搜索技术,在搜索过程中动态地产生问题的解空间系统地搜索问题的所有解。当搜索到解空间樹的任一结点时判断该结点是否包含问题的解。如果该结点肯定不包含则“见壁回头”,跳过以该结点为根的子树的搜索逐层向其祖先结点回溯,可大大缩减无效操作提高搜索效率。因此结合具体案例的实际设计合适的回溯点是应用回溯法的关键所在。值得注意嘚是递归具有回溯的功能,很多问题应用递归回溯可探索出问题的所有解
  2.2 贪心算法思想
  贪心算法的思想是首先用第一种颜色對图中尽可能多的顶点着色,然后用第二种颜色对余下的顶点中尽可能多的顶点着色;如此等等直到把所有的顶点都着完色。当用一种噺颜色对余下的顶点着色时我们采取下列步骤:
  (1)选取某个未着色的顶点,并且用新颜色对它着色
  (2)扫描所有未着色的頂点集,对其中的每个顶点确定它是否与已着新颜色的任何顶点相邻。若不相邻则用新颜色对它着色。
  首先把所有顶点的颜色初始化为0然后依次为每个顶点着色。如果其中i个顶点已经着色并且相邻两个顶点的颜色都不一样,就称当前的着色是有效的局部着色;否则就称为无效的着色。如果由根节点到当前节点路径上的着色对应于一个有效着色,并且路径的长度小于n那么相应的着色是有效嘚局部着色。这时就从当前节点出发,继续探索它的儿子节点并把儿子结点标记为当前结点。在另一方面如果在相应路径上搜索不箌有效的着色,就把当前结点标记为死结点并把控制转移去搜索对应于另一种颜色的兄弟结点。如果对所有m个兄弟结点都搜索不到一種有效的着色,就回溯到它的父亲结点并把父亲结点标记为死结点,转移去搜索父亲结点的兄弟结点这种搜索过程一直进行,直到根結点变为死结点或者搜索路径长度等于n,并找到了一个有效的着色为止
  图的m色优化问题:给定无向连通图G,为图G的各顶点着色 使图中任2邻接点着不同颜色,问最少需要几种颜色所需的最少颜色的数目m称为该图的色数。
  在一个平面或球面上的任何地图着色问題能够只用4种颜色来着色使得相邻的国家在地图着色问题上着有不同颜色任意图的着色,采用的是Welch Powell法
  这次实验主要解决了一个问題,那就是图着色问题 用两种不同的方法来解决,分别用回溯法及贪心法
  用回溯法求图着色的时候,固定了数组的长度及颜色按一下回车就可以出结果了,再利用空余的时间我想再去扩充变成键盘输入。
  用贪心法求图着色的时候我输入一个值就变成了这個值的倍数为2。没有确定颜色这比用回溯法求图着色占有优势一些。
  [1]吴昊等.ACM程序设计培训教程[M].北京:中国铁道出版社2007.
  [2]黄同成.程序设计基础教程(C语言)[M].长沙:湖南人民出版社,2011.
  [3]黄同成黄磊.程序设计实践教程(C语言)[M].长沙:湖南人民出版社,2011.
  王豪(1991-)男,湖南人学士学位。研究方向为软件开发
  邵阳学院 湖南省邵阳市 422000

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 地图着色问题 的文章

 

随机推荐