地图染色问题可以根据四色定理来解决。所谓四色定理,就是指可以用不多于四种的颜色对地图着色,使相邻的行政区域不重色,因此我们可以用四色定理的结论,用回溯算法对一幅给定的地图染色。

        算法的基本思想是:从第(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

【算法导论】地图染色算法相关推荐

  1. 算法导论之贪心算法(Huffman编码和拟阵)

    贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解. 问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最 ...

  2. 《算法导论》CLRS算法C++实现(六)P100 基数排序

    第八章 线性时间排序 8.3 基数排序 算法导论上对基数排序的算法描述只有两行... 微言大义的说... RADIX-SORT(A, d) 1 for i ← 1 to d 2 do use a st ...

  3. 算法导论 — 比较排序算法对比实验

    <算法导论>这本书介绍了5种比较排序算法:插入排序.冒泡排序.归并排序.堆排序.快速排序.我们现在通过实验来对比这5种排序算法的运行时间.用随机数发生器生成不同长度的数组,将每种算法应用于 ...

  4. 【H5/JS】游戏常用算法-碰撞检测-地图格子算法

    这种算法经常用于RPG(早期的<最终幻想>.<DQ>.<仙剑奇侠传>).SLG(<炎龙骑士团>.<超级机器人大战>).PUZ(<俄罗斯 ...

  5. 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础

    一个小白的算法学习之路.读<算法导论>第一天.本文仅作为学习的心得记录. 算法(Algorithm) 对于一个程序员来说,无论资历深浅,对算法一词的含义一定会或多或少有自己的体会,在< ...

  6. 算法导论 c语言,算法导论 之 堆排序[C语言]

    一.算法实现 堆排序算法的时间复杂度为O(nlgn),其算法实现如下: void heap_sort(int *array, int max) { int idx = 0; build_max_hea ...

  7. 算法导论系列:分治算法

    说起分治法,大家一定也都听过秦始皇采用郡县制将国家分为三十六郡的故事,我们常说"山高皇帝远",意思就是山高路远,皇帝都管不了,实际上无论皇帝多远,山有多高,整个国家都属于朝廷统治, ...

  8. 【算法导论】贪心算法,递归算法,动态规划算法总结

    一般实际生活中我们遇到的算法分为四类: 一>判定性问题 二>最优化问题 三>构造性问题 四>计算性问题 而今天所要总结的算法就是着重解决 最优化问题 <算法之道>对 ...

  9. 【算法导论】幻方算法

    说起幻方,大家应该在小学时候就已经接触过了,最简单的就是九宫格,射雕英雄传中的那段至今还记得:戴九履一,左三右七,二四为肩,六八为足.下面我们就来看看这个有趣的问题. 幻方可以分为:奇数阶幻方.双偶阶 ...

最新文章

  1. libsvm python_LibSVM for Python 使用
  2. 跨站的艺术-XSS Fuzzing 的技巧
  3. 金字火腿推出“人造牛排” 股价连日上涨接近历史高点
  4. 百度搜索遭遇“假德邦” 宣判结果来了...
  5. 向量组A可以由一个向量组B表出,并且A的秩小于B的秩,那么A线性相关
  6. FDDB人脸数据集dataset的dataset数据集的制作
  7. Oracle 12c 数据库基础教程
  8. 探访厦航飞机女“医生” 有机务“熊猫”美誉
  9. prisma orm_如何使用Node.js和Prisma构建GraphQL服务器
  10. 运营100天的微信公众号能挣多少钱?
  11. 用C语言求解一元二次方程组
  12. Revit SDK EXTENSIONS(软件开发工具包扩展)是什么
  13. 倪光南院士:构建安全可控的信息技术体系,云宏高安全的云计算关键核心技术先行
  14. MTK6735 竖屏横用、旋转90度、MTK_LCM_PHYSICAL_ROTATION
  15. PostgreSQL索引(一)
  16. 结绳中文编程[第一节]
  17. 表格对角线两边打字_表格对角线两边打字_表格斜线一分为二怎么打字(excel斜杠分割表格打字)...
  18. opengl和vulkan
  19. OSChina 周五乱弹 ——和我斗!要赢好难!
  20. [深度学习][原创]常用ocr框架和技术总结

热门文章

  1. 二七十,大贰,跑胡子的吃牌算法
  2. 推荐一本好书:半导体简史
  3. kindeditor编辑器上传图片超宽自动压缩-PHP代码
  4. Query.uniqueResult()计算数据总条数
  5. Could not find a package configuration file provided by “object_recognition_msgs“ with any ...
  6. Python.net 和IronPython 是什么关系
  7. AI是否可以成为未来最好的围棋手,可能永远不会
  8. 智能聊天机器人如何帮助跨境电商卖家提高成交转化率?
  9. 架构师必看:谈软件架构师如何做好架构设计(上)
  10. 资源网站大集合(巨强)