【算法导论】地图染色算法
地图染色问题可以根据四色定理来解决。所谓四色定理,就是指可以用不多于四种的颜色对地图着色,使相邻的行政区域不重色,因此我们可以用四色定理的结论,用回溯算法对一幅给定的地图染色。
算法的基本思想是:从第(1)号行政区域开始染色,每个区域逐次用颜色1#、2#、3#、4#进行试探,若当前所取的颜色与周围已染色的行政区域不重色,则用栈记下该区域的颜色序号,否则依次用下一颜色进行试探;若出现用1#到4#颜色均与相邻区域的颜色重色,则需退栈回溯,修改当前栈顶的颜色序号,再进行试探。直到所有行政区域都已分配合适的颜色。
行政地图如下:
具体程序实现如下:
#include<stdio.h>#define N 7//区域个数void MapColor(int dist[N][N],int s[N])
{int color,area,k;//总共有4种颜色s[0]=1;//第一个区域先着色为颜色1area=1;//从第二区域开始试探染色color=1;//从第一种颜色开始试探while(area<N)//是否全部染色完毕{while(color<=4){if(area>=N)break;k=0;while((k<area)&&(s[k]*dist[area][k]!=color))//判断是否重色k++;if(k<area)color++;else{s[area]=color;area++;color=1;}}if(color>4)//没有找到合适的颜色,需要进行回溯{area=area-1;color=s[area]+1;}}
}
void main()
{int dist[N][N]={{0,1,1,1,1,1,0},//地图的邻接矩阵{1,0,0,0,0,1,0},{1,0,0,1,1,0,0},{1,0,1,0,1,1,0},{1,0,1,1,0,1,0},{1,1,0,1,1,0,0},{0,0,0,0,0,0,0}};int s[N]={0};MapColor(dist,s);printf("地图区域标号为1~7的染色情况为:");for(int i=0;i<N;i++)printf("%d ",s[i]);printf("\n");
}
结果显示如下:
其中栈S的变化情况如下:
注:如果程序出错,可能是使用的开发平台版本不同,请点击如下链接: 解释说明
原文:http://blog.csdn.net/tengweitw/article/details/17641017
作者:nineheadedbird
【算法导论】地图染色算法相关推荐
- 算法导论之贪心算法(Huffman编码和拟阵)
贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解. 问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最 ...
- 《算法导论》CLRS算法C++实现(六)P100 基数排序
第八章 线性时间排序 8.3 基数排序 算法导论上对基数排序的算法描述只有两行... 微言大义的说... RADIX-SORT(A, d) 1 for i ← 1 to d 2 do use a st ...
- 算法导论 — 比较排序算法对比实验
<算法导论>这本书介绍了5种比较排序算法:插入排序.冒泡排序.归并排序.堆排序.快速排序.我们现在通过实验来对比这5种排序算法的运行时间.用随机数发生器生成不同长度的数组,将每种算法应用于 ...
- 【H5/JS】游戏常用算法-碰撞检测-地图格子算法
这种算法经常用于RPG(早期的<最终幻想>.<DQ>.<仙剑奇侠传>).SLG(<炎龙骑士团>.<超级机器人大战>).PUZ(<俄罗斯 ...
- 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础
一个小白的算法学习之路.读<算法导论>第一天.本文仅作为学习的心得记录. 算法(Algorithm) 对于一个程序员来说,无论资历深浅,对算法一词的含义一定会或多或少有自己的体会,在< ...
- 算法导论 c语言,算法导论 之 堆排序[C语言]
一.算法实现 堆排序算法的时间复杂度为O(nlgn),其算法实现如下: void heap_sort(int *array, int max) { int idx = 0; build_max_hea ...
- 算法导论系列:分治算法
说起分治法,大家一定也都听过秦始皇采用郡县制将国家分为三十六郡的故事,我们常说"山高皇帝远",意思就是山高路远,皇帝都管不了,实际上无论皇帝多远,山有多高,整个国家都属于朝廷统治, ...
- 【算法导论】贪心算法,递归算法,动态规划算法总结
一般实际生活中我们遇到的算法分为四类: 一>判定性问题 二>最优化问题 三>构造性问题 四>计算性问题 而今天所要总结的算法就是着重解决 最优化问题 <算法之道>对 ...
- 【算法导论】幻方算法
说起幻方,大家应该在小学时候就已经接触过了,最简单的就是九宫格,射雕英雄传中的那段至今还记得:戴九履一,左三右七,二四为肩,六八为足.下面我们就来看看这个有趣的问题. 幻方可以分为:奇数阶幻方.双偶阶 ...
最新文章
- libsvm python_LibSVM for Python 使用
- 跨站的艺术-XSS Fuzzing 的技巧
- 金字火腿推出“人造牛排” 股价连日上涨接近历史高点
- 百度搜索遭遇“假德邦” 宣判结果来了...
- 向量组A可以由一个向量组B表出,并且A的秩小于B的秩,那么A线性相关
- FDDB人脸数据集dataset的dataset数据集的制作
- Oracle 12c 数据库基础教程
- 探访厦航飞机女“医生” 有机务“熊猫”美誉
- prisma orm_如何使用Node.js和Prisma构建GraphQL服务器
- 运营100天的微信公众号能挣多少钱?
- 用C语言求解一元二次方程组
- Revit SDK EXTENSIONS(软件开发工具包扩展)是什么
- 倪光南院士:构建安全可控的信息技术体系,云宏高安全的云计算关键核心技术先行
- MTK6735 竖屏横用、旋转90度、MTK_LCM_PHYSICAL_ROTATION
- PostgreSQL索引(一)
- 结绳中文编程[第一节]
- 表格对角线两边打字_表格对角线两边打字_表格斜线一分为二怎么打字(excel斜杠分割表格打字)...
- opengl和vulkan
- OSChina 周五乱弹 ——和我斗!要赢好难!
- [深度学习][原创]常用ocr框架和技术总结
热门文章
- 二七十,大贰,跑胡子的吃牌算法
- 推荐一本好书:半导体简史
- kindeditor编辑器上传图片超宽自动压缩-PHP代码
- Query.uniqueResult()计算数据总条数
- Could not find a package configuration file provided by “object_recognition_msgs“ with any ...
- Python.net 和IronPython 是什么关系
- AI是否可以成为未来最好的围棋手,可能永远不会
- 智能聊天机器人如何帮助跨境电商卖家提高成交转化率?
- 架构师必看:谈软件架构师如何做好架构设计(上)
- 资源网站大集合(巨强)