ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:154.50KB ,
资源ID:7618578      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7618578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中国地图四色染色问题.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

中国地图四色染色问题.doc

1、中国地图四色染色问题一、 问题描述将中国地图用四种不同的颜色红、蓝、绿、黄来染色,要求相邻的省份染色不同,有多少种不同的方案?二、 问题分析本文将中国地图的 34 个省、直辖市、自治区、以及特别行政区转化为图论中的图模型。其中每个省、市、自治区、特别行政区用图中的一个结点表示,两个结点间联通仅当两个板块接壤。则问题转化为图论中的染色问题。由于海南、台湾省不与其它任何省份相邻,所以如果除海南、台湾外如果有 n 种染色方法,那么加上海南和台湾省后,有 4*4*n 种染色方法。下面考虑除海南和台湾后的 32个结点的染色方法。三、 中国地图染色方法采用分开海南和台湾省的分析方法,一方面的原因是除海南和

2、台湾后的 32 个结点,可以组成一个联通图,因为海南省和台湾省不和任何其它省份邻接。另一方面,我们建立一个联通图模型后,染色问题可以用深度优先遍历算法 DFS,或者广度优先遍历算法 BFS 来解决,由于该方法的时间复杂度较高,属于暴力法,少考虑两个省份可以减少计算机处理此问题的时间。本文采用 DFS 算法来解决这个染色问题。3.1 DFS 算法简介DFS 算法是图的一种图的深度遍历算法,即按照往深的地方遍历一个图,若到一个分支的尽头,则原路返回到最近一个未被遍历的结点,继续深度遍历。DFS 遍历的具体步骤可为下:1) 标记图中所有结点为“未访问” 标记。2) 输出起始结点,并标记为“访问” 标

3、记3) 起始结点入栈4) 若栈为空,程序结束;若栈不为空,取栈顶元素,若该元素存在未被访问的邻接顶点,则输出一个邻接顶点,并置为“访问”状态,入栈;否则,该元素退出栈顶。3.2 染色问题中的 DFS 算法设计我们先对任一结点染色,然后用 DFS 从该结点出发,遍历该图,遍历的下一结点颜色染为与之相邻的结点不同的颜色即可。如果该结点无法染色则回到上一个结点重新染色,直到所有的结点都被染色即可。最后统计染色种数。染色问题的算法伪代码可以描述如下:color_DFS(当前染色结点):for i in 所有颜色 while j 的已染色邻接点if 结点 j 相邻接点被染成 i 颜色标记并 breaki

4、f 未被标记当前结点染为 i 色if 当前结点为最后一个结点endelsecolor_DFS(next)3.3 数据结构设计为了实现 DFS 染色算法,我们需要设计相应的数据结构。由于图的结点不多,只有 32 个,我们采用图的邻接矩阵来存储该图,记为 map3333,map0 不存储数据,如果两结点 i,j 相邻,mapij=1,否则 mapij=0。为了便于计算机编程,我们将每一个地名用相应结点号来表示,1:“新疆“,2:“ 西藏“,3:“青海“,4:“甘肃“,5:“内蒙古“,6:“宁夏“,7:“黑龙江“,8:“吉林“,9:“辽宁“,10:“河北“,11:“北京“,12:“山西“,13:“陕

5、西“,14:“山东“,15:“天津“,16:“河南“,17:“安徽“,18:“江苏“,19:“上海“,20:“浙江“,21:“福建“,22:“江西“,23:“广东“,24:“湖南“,25:“湖北“,26:“重庆“,27:“四川“,28:“贵州“,29:“云南“,30:“广西“,31:“香港“,32:“澳门“。新疆和西藏相邻,那么我们就可以用 map12=1 来表示。同样地,一种颜色我们也可以用一个数字来表示,在这里,我们用数字来代表颜色,比如 1-红、2-蓝、3- 绿、4- 黄。四、 C 语言代码实现#include #include using namespace std;char name

6、10=“,“新疆“,“西藏“,“青海“,“甘肃“,“ 内蒙古“,“宁夏“,“黑龙江“,“ 吉林“,“辽宁“,“河北“,“北京“,“ 山西“,“陕西“,“山东“,“天津 “,“河南“,“安徽“,“江苏“,“上海“,“浙江“,“福建“,“江西“,“ 广东“,“湖南“,“湖北“,“重庆 “,“四川“,“贵州“,“云南“,“广西“,“香港“,“澳门“;char color4=“,“红“,“蓝“,“绿“,“黄“;int map3333;int vis33;int n,m;long long cnt;/染色方法设置为 long long 防止溢出void init_map()map12=map21=1;/

7、表示新疆和西藏连通map13=map31=1;map14=map41=1;map23=map32=1;map227=map272=1;map229=map292=1;map34=map43=1;map327=map273=1;map45=map54=1;map46=map64=1;map413=map134=1;map427=map274=1;map56=map65=1;map57=map75=1;map58=map85=1;map59=map95=1;map510=map105=1;map512=map125=1;map513=map135=1;map613=map136=1;map78=m

8、ap87=1;map89=map98=1;map910=map109=1;map1011=map1110=1;map1012=map1210=1;map1014=map1410=1;map1015=map1510=1;map1016=map1610=1;map1115=map1511=1;map1213=map1312=1;map1216=map1612=1;map1316=map1613=1;map1325=map2513=1;map1326=map2613=1;map1327=map2713=1;map1416=map1614=1;map1417=map1714=1;map1418=map

9、1814=1;map1617=map1716=1;map1625=map2516=1;map1718=map1817=1;map1720=map2017=1;map1722=map2217=1;map1725=map2517=1;map1819=map1918=1;map1820=map2018=1;map1920=map2019=1;map2021=map2120=1;map2022=map2220=1;map2122=map2221=1;map2123=map2321=1;map2223=map2322=1;map2224=map2422=1;map2225=map2522=1;map23

10、24=map2423=1;map2330=map3023=1;map2331=map3123=1;map2332=map3223=1;map2425=map2524=1;map2426=map2624=1;map2428=map2824=1;map2430=map3024=1;map2526=map2625=1;map2627=map2726=1;map2628=map2826=1;map2728=map2827=1;map2729=map2927=1;map2829=map2928=1;map2830=map3028=1;map2930=map3029=1;void dfs(int now)

11、/当前结点染色int i,j,k;for(i = 1; i=5)exit(0);for(k=1;k=m;k+)/输出 4 组染色结果printf(“%s-%s “,namek,colorvisk);if(k%8=0)printf(“n“);printf(“n“);*/elsedfs(now+1);/下一个结点染色int main()n=4;/4 种颜色m=32;/32 个省份memset(map,0,sizeof(map);/地图全部置为 0,表示未连通memset(vis,0,sizeof(vis); /每个顶点未染色init_map(); /初始化图cnt = 0;/染色方法数dfs(1)

12、;/从结点 1 开始染色printf(“%lldn“,cnt);return 0;五、 结果分析本次实验在 MAC_OS 操作系统进行实验,处理器为 2.8GHz Intel i7 处理器,其计算结果为 360516096,耗时约 150s。如果加上海南省和台湾省,其最终的计算结果为 360516096*16=5768257536。图 1 是部分染色结果(不包括台湾、海南省) ,事实上台湾海南省的染色任意。图 1 32 个结点部分染色结果六、 总结通过这个图论染色问题,加深了我对图论知识的理解。我明白了如何将理论知识应用到实际问题中来。虽然我以前也做过类似的地图染色实验,但是在这过程中我发现了自己的一些不足,比如说不够仔细,在构建一个邻接矩阵中多次忘记一些邻接边,以至于邻接矩阵错误。总之,这次实验加强了我的动手能力以及解决问题的能力,加深了我对图论知识的理解和数据结构的应用能力,总之我收获颇多。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报