地图四着色问题

一、介绍

对地图的着色问题,能否用四个颜色对地图着色,要求每个相邻的区域都要着上不同的颜色。

二、算法思路

例如中国的省份为例,从一个省开始,给它涂上任意一种颜色1,遍历它旁边的省份,涂上与已经涂色并于他相邻的省份不同的颜色就行了。

递归求解;在前面的n-1个节点都合法的着色之后,开始对第n个节点着色。这时候枚举可用的4个颜色(4着色),通过和与它相邻的节点的颜色相比较,来判断这个颜色是否合法。找到一种颜色能使第n个节点合法着色即可完成中国地图4着色。

三、代码

#include <stdio.h>
//N=number of city + 1
#define N 8

int isOk(int metrix[N][N],int city[N],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[N][N],int city[N],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[N]= {0};
    int metrix[N][N]=  {
                        {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;
}

四、总结

这个代码有点简单,因为是事先输入了城市之间的关系。如果从实际角度考虑,应该要手动收入然后输出。最好还能够用图形化界面显示着色情况。

时间: 2024-10-08 06:59:12

地图四着色问题的相关文章

【算法】栈在回溯法中的应用-地图四染色问题

"四染色"问题:用不多于四种颜色对地图着色,使相邻的区域不重色. 算法思想:从第一个区域开始染色,每一个区域依次用颜色1,2,3,4进行试探,如果当前所试探的颜色与周围区域都不同色,则用栈记录该区域色数,否则用下一色数继续试探:如果四种颜色都与相邻区域重色,那么需要退栈,修改栈顶色数,即更改上一区域的颜色继续试探. 数据结构: s[]栈的顺序存储,用于表示区域的染色 dist[][]地图邻接矩阵,0表示不邻接,1表示邻接,区域与它自己表示为不邻接 以六区域为例: /** * 地图四染色

地图四色着图的C语言实现

四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了四色问题,问题也终于成为定理,这是第一个借助计算机证明的定理.(这段文字来源于百度百科) 这篇文章主要介绍利用C语言实现地图四色着图.主要包括:设计的数据结构:算法实现等. 1 着图的数据结构 着图时无需表示具体的地图多边形,只需要表示多边形的Voronoi图即可,说的简单点可见下图: 对于左边的地

谷歌地球卫片地图如何OZI中制成导航地图

一.说明 本案例演示谷歌地球卫片地图如何OZI中制成导航地图. 谷歌地球卫片地图来源于"水经注万能地图下载器". 如果没有安装本软件,可以百度"水经注软件"到官方网站下载. 二.下载地图 启动水经注万能地图下载器,切换在线地图为"卫星.谷歌地球",点击"框选下载区域",框选需要下载的区域,双击框选区域,选择级数,如下图. 点击"确定"按钮,开始下载卫星地图. 下载完成后会弹出对话框询问是否要立即导出,选择&

Four color theorem(1)

最近一直在涂secret garden,所以引发了对四色定理的遐想 四色定理又称四色猜想.四色问题,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了四色问题,问题也终于成为定理,这是第一个借助计算机证明的定理.四色定理的本质就是在平面或者球面无法构造五个或者五个以上两两相连的区域. 一个多世纪以来,数学家们为证明这条定理绞尽脑汁,所引进的概念与方法刺激了拓扑学与图论的生长.发展

web前端之性能优化

作为一个前端工作人员,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益匪浅,为了让自己印象更深刻点,决定作此文,当做学习笔记也好,知识总结也罢,总归看过的东西要让自己很好地掌握很好地运用起来才是王道.在解读这些规则的同时,我会用我一年半多的移动网站开发经历提出一些针对移动网站的优化建议. 首先我们从三个大类讲起:一,网络服务器.二,浏览器,三代码上面,针对这三个大类总结出了下面

前端性能优化的14个规则

作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益匪浅,为了让自己印象更深刻点,决定作此文,当做学习笔记也好,知识总结也罢,总归看过的东西要让自己很好地掌握很好地运用起来才是王道.在解读这些规则的同时,我会用我一年半多的移动网站开发经历提出一些针对移动网站的优化建议. 规则01:尽量减少HTTP请求前端优化的黄金准则指导着前端页面的优化策略:只有10%-20

在网页中插入一个小地图,或是带标记的小地图

举个例子吧 现在的静态网页,有很多都会插入百度地图,特别是商家,或是企业站 例如 点击查看百度地图 便会进入这个网页中 也可以直接嵌入网页中,把地图的html代码,放入一个div中 下面步入正题,看看怎么来获取地图的代码 首先打开百度,输入百度地图四个字 点击搜索 进入后,找到这条内容 点击创建地图 打开这个网页后,就是这样的 可以搜索到你要找的位置,然后标记,标记完以后 可以点击获取代码,复制就ok了 把复制的代码,放到你需要的位置就可以了,放的时候也要注意,避免出错

【高德地图API】从零开始学高德JS API(四)搜索服务

摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.如果说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血.有个各种各样的地图服务,我们的地图应用才能变得有血有肉,活灵活现.第四篇拆成了几个要点,本篇主要讲搜索服务.包括周边搜索,关键词搜索,范围搜索,搜索提示(自动完成,输入提示),行政区域,交叉路口,检索自有数据(云图). demo:http://zhaoziang.com/amap/zero_4_1.html

(四)WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图

1.前言 在前面我花了两个篇幅来讲解行列号的获取,也解释了为什么要获取行列号.在这一章,我将把常见的几种请求瓦片时的URL样式罗列出来,并且给出大致的解释. 我在这里将地图分为离线地图和在线地图.所谓离线地图,即保存在本地而没有发布的地图.在线地图即发布与网上,可以通过浏览器访问的地图. 2.ArcGIS切图——exploded类型 在前面章节中我已经贴出了exploded类型的切图图片,这里再次给出. 那么如何通过行列号来换算出此瓦片的URL呢.我们首先可以通过观察得出三个结论: (1)L开头