地图四着色问题
2016-04-24 18:44
274 查看
一、介绍
对地图的着色问题,能否用四个颜色对地图着色,要求每个相邻的区域都要着上不同的颜色。
二、算法思路
例如中国的省份为例,从一个省开始,给它涂上任意一种颜色1,遍历它旁边的省份,涂上与已经涂色并于他相邻的省份不同的颜色就行了。递归求解;在前面的n-1个节点都合法的着色之后,开始对第n个节点着色。这时候枚举可用的4个颜色(4着色),通过和与它相邻的节点的颜色相比较,来判断这个颜色是否合法。找到一种颜色能使第n个节点合法着色即可完成中国地图4着色。
三、代码
四、总结
这个代码有点简单,因为是事先输入了城市之间的关系。如果从实际角度考虑,应该要手动收入然后输出。最好还能够用图形化界面显示着色情况。
本文出自 “Sunny” 博客,请务必保留此出处http://qmkkd.blog.51cto.com/9511687/1767279
对地图的着色问题,能否用四个颜色对地图着色,要求每个相邻的区域都要着上不同的颜色。
二、算法思路
例如中国的省份为例,从一个省开始,给它涂上任意一种颜色1,遍历它旁边的省份,涂上与已经涂色并于他相邻的省份不同的颜色就行了。递归求解;在前面的n-1个节点都合法的着色之后,开始对第n个节点着色。这时候枚举可用的4个颜色(4着色),通过和与它相邻的节点的颜色相比较,来判断这个颜色是否合法。找到一种颜色能使第n个节点合法着色即可完成中国地图4着色。
三、代码
#include <stdio.h> //N=number of city + 1 #define N 8 int isOk(int metrix ,int city ,int current) { for(int j=0; j<current; j++) if(metrix[current][j]==1&&city[j]==city[current]) return 0; return 1; } void color(int metrix ,int city ,int sum,int current) { if(current<=sum) for(int i=1; i<=4; i++) //colored current city { city[current]=i; if(isOk(metrix,city,current)) { color(metrix,city,sum,current+1); //colored next city break; } } } int main() { int city = {0}; int metrix = { {0,1,1,0,0,0,0}, {1,0,0,1,0,1,0}, {1,0,0,1,1,0,0}, {0,1,1,0,1,1,0}, {0,0,1,1,0,1,1}, {0,1,0,1,1,0,1}, {0,0,0,0,1,1,0} }; printf("总共有%d个城市\n",N-1); color(metrix,city,N-1,0); printf("\n着色方法:\n"); for(int i=0; i<N-1; i++) printf("%3d",city[i]); return 0; }
四、总结
这个代码有点简单,因为是事先输入了城市之间的关系。如果从实际角度考虑,应该要手动收入然后输出。最好还能够用图形化界面显示着色情况。
本文出自 “Sunny” 博客,请务必保留此出处http://qmkkd.blog.51cto.com/9511687/1767279
相关文章推荐
- vijos p1233
- 海量数据处理常用思路和方法
- 13-如何执行PHP脚本
- 12-PHP的FastCGI
- =>goes to
- 13、在 uwp应用中,给图片添加高斯模糊滤镜效果(一)
- itextsharp整理
- 11.嵌入式PHP
- 10-Apache运行与钩子函数
- 关于如何避免Android中Bitmap引起的OutOfMemoryError
- 夺命雷公狗ThinkPHP项目之----企业网站13之文章列表页的实现(主要是分页的实现)
- 内存泄漏与内存溢出
- ubuntu下无法保存修改文件
- 关于VMware上安装Ubuntu的一切
- 11g: Program with PL/SQL - 1Z0-144
- Apache配置信息中文版
- bzoj 4004: [JLOI2015]装备购买
- 09-通过mod_php5支持PHP
- Tablyout 点击tab切换页面闪烁
- 查出某个特定时间一小时内,两小时内,N小时内的累计和