GIS基础算法之地图着色问题
来源:互联网 发布:药家鑫该不该死 知乎 编辑:程序博客网 时间:2024/06/06 16:36
今天在图书馆看到一个同学背着一个很有意思的书包,书包表面是由很多三角形拼接而成的并且只用四种不同颜色填充的,并且每个三角形与邻接三角形的颜色都是不一样的(我好想买一个这种书包。。。淘宝上找了好久没找到)。我突然想到我高中时候看过的一个问题---四色问题。非常非常蹊跷的是,在我做的考研真题中居然两年出现了这个题目。为了跟我的GIS主题相关,我特意把问题改成了地图着色问题。这里有一篇比较好的微博文章(一个中国台湾学者),推荐给大家,有助于大家理解四色题 http://blog.sina.com.cn/s/blog_491de9dd010003hz.html 。
下面直接上图,解释什么是四色问题
看了这张图,应该可以理解不少吧。今天我用一个效率不高的算法,去解决了对给定区域图内找出所有的着色方案(只用四种颜色)。
算法实现:#include <stdio.h>#define N 10//邻接矩阵int relations[N][N]={{0,0,0,0,0,0,0,0,0,0},{0,0,1,0,1,1,0,0,0,0},{0,1,0,1,1,1,1,0,0,0},{0,0,1,0,0,1,1,0,0,0},{0,1,1,0,0,1,0,1,1,0},{0,1,1,1,1,0,1,1,1,1},{0,0,1,1,0,1,0,0,1,1},{0,0,0,0,1,1,0,0,1,0},{0,0,0,0,1,1,1,1,0,1},{0,0,0,0,0,1,1,0,1,0}};//0代表不相连int count = 0;//统计有几种着色方案void print(int a[]){int i;count++;printf("第%d种着色方案:\n",count);for(i = 1;i < N;i++){printf("%d ",a[i]);if(i%3==0){printf("\n");}}}//主要算法void MapMatchColor(int a[],int n)//a是配色数组,n是第几个需要配色的区域{int i;int colors[5] = {0,1,1,1,1};//这里0代表已经被使用,1代表还未被使用if(n == N){print(a);}else{for(i = 1;i<n;i++){if(relations[n][i])//如果第n个区域与前n-1个区域中有相邻边,则不能用与他们相同的颜色,赋值为0{colors[a[i]] = 0;}}for(i = 1;i < 5;i++){if(colors[i]){a[n] = i;MapMatchColor(a,n+1);//递归(回溯法)}}}}void main(){int a[N];a[1] = 1;MapMatchColor(a,2);}
这是算法结果:
阅读全文
0 0
- GIS基础算法之地图着色问题
- 地图着色问题
- 地图四着色问题
- GIS地图学习笔记一之基础概念《未完待续》
- 贪心算法之区间图着色问题
- 贪心算法之区间图着色问题
- GIS基本算法基础
- 经典算法问题 之 图的m-着色判定问题
- 地图着色算法C语言实现
- 地图基本知识学习、GIS基础学习
- [C++]美国地图着色问题C++实现
- opengles之卡通着色算法
- 回朔法之图着色问题
- 贪心法之着色问题
- 地图着色算法C语言实现(加个人评注)
- 树着色问题(贪心算法)
- 回溯算法----图的M着色问题
- 算法 图的M着色问题
- [LeetCode]--Maximum Subarray
- https://www.cnblogs.com/sea-star/p/rtcp.html
- javacsv读写csv文件
- 双11前夕,阿里技术人都在忙什么?
- QMessageBox的用法
- GIS基础算法之地图着色问题
- 图像处理基础知识之二
- ios本地缓存及图片缓存清理
- LoadRunner压测脚本执行时的常见错误及解决方法(持续更新...)
- Centos7 下 yum -y install ntp 出现/var/run/yum.pid 已被锁定
- HBASE(四 原理篇)
- 第一次部署javaweb项目到linux(详细)
- ROS模拟器-第0篇-10分钟上手ROS仿真机器人路径规划与障碍物避障
- Operational Transformation算法图解