四色问题的一个简单解
多年前写的1篇文章,无杂志肯发表,所以今天贴在这,供感兴趣的朋友,特别是做图形的朋友参考:
四色问题的一个简单解
提要:四色问题困扰了人类很多年。本文根据平面封闭图形两两相邻的可能性,结合奇偶排列,给出了此问题的一个初等解法,并指出需进一步研究的是国中国。希望有识之士能从中受到启发,考虑问题时能找到新的视点。
关键词:四色问题,周边区域,奇偶数
0 引言:四色问题题目是很简单的:在地图上的国家能否用四种颜色来充填,并使相邻的国家不重色。就是这个简单的题目,困扰了人类很多年,结果是于1976年靠大型计算机给出了解答。虽然答案是肯定的,却一直没有适当的数学证明。虽然也有人称给出了证明,但用的都是图论等高等理论[1][2],一般人不好理解。受七桥问题的启发[3],本文用初等数学的方法,给出了一个简单解。注意:在提出这个问题的时代,还没有现在的这些高等数学理论。也就是说,这个问题用初等数学的方法应该是可解的。
1 基本解答
1.1 基本图形
地图上的任何一个国家与邻国的关系,相当于一个任意封闭图形,被其周边区域的其它封闭图形环绕。在边界附近,相当于边界线被短线进行任意不同的分割(如图1),分割的各小段边界线代表环绕的不同国家的一部分,总数有奇、偶2种可能。如果填以不同的颜色来区分,考虑到使用的颜色数最少,可以采用奇偶排列的方式:其本身占用一种颜色1,偶数2、奇数3分别代表另外的两种颜色。从某个环绕的封闭图形开始充填(比如上部的封闭图形2),用颜色2和3按奇偶交替的方式充填。如果周边封闭图形(即国家)为偶数个,三种颜色即可(如图1.a);如果周边封闭图形为奇数个,须增加另外一种颜色4来补充,共需四种颜色(如图1.b)。
a 外围国家偶数个 b 外围国家奇数个 图1外围国家的填色 |
1.2 2级图形
对于2级封闭图形(如图2的阴影部分),其部分周边区域已经填色(3,1,4),我们称其为内邻区域。其它周边区域皆空白,我们称为外邻区域。其外邻区域与内邻区域中的1级封闭图形已经完全分开(如图2.a中的封闭图形1)。其实,上级封闭图形被环绕填色后,相当于被封闭,与任何其它未填色的封闭图形都已经完全分开。
a 2级封闭图形的内邻区域 b 2级封闭图形外邻区域的填色 |
图2 2级封闭图形的填色 |
2级封闭图形外邻区域的填色,我们参照1级封闭图形的周边区域填色方案,只是:内邻区域已经填色,填色时受到部分限制;周边空白区域非环形,变为相当于弧状分布的外邻区域,填色只有从弧形一端开始才合理。
2级封闭图形外邻区域的填色,有以下2种可能:
1、对于颜色最多的部位——只可能是1级封闭图形外邻区域填色时的尾端,当1级封闭图形的外邻区域边界(空白处)总数为奇数时加用了补充颜色,才会用到4种颜色。如图2中阴影部分的封闭图形2(其邻近的封闭图形4、封闭图形4一侧的封闭图形3都相同),我们选内邻区域最末两端封闭图形的颜色(3和4)为基本的奇偶充填颜色,从弧形一端(右下、逆时针)、按奇偶方式充填。
如果其外邻区域的弧形边界线被分割为奇数(如图2.b),在最末端处,需要另一种颜色来补充。因为1级封闭图形已经与本封闭图形的外邻区域完全分开,可以使用它的颜色(如图2.b中的颜色1)。对本次奇偶填色操作而言,它是备用的补充颜色。
如果其外邻区域的弧形边界线被分割为偶数,用2种颜色(3和4)即可充填完毕,不需要备用的1级封闭图形的颜色。
2、在其它部位,由于任意一个2级封闭图形的内邻区域两端处封闭图形的颜色相同,但都与1级封闭图形不同,而1级封闭图形与外邻区域已经完全分开,我们可选内邻区域一端处封闭图形的颜色和1级封闭图形的颜色作为基本的充填颜色,对空白的外邻区域进行奇偶交替充填。另一种颜色作为备用的补充颜色——以使用颜色数最少为原则。
图4 3级封闭图形 及其内外邻区域 |
如果外邻区域的边界弧段被分割为偶数,可以正常填充结束(见图3下部);如果为奇数,在最后,须用备用颜色补充,与图2.b类似(边界加一短线即可,未图示),只是补充颜色应为颜色4。
图3 其它部位的2级封闭图形 |
当然,实际填色时,各个2级封闭图形应该按照顺序,不能有跳跃。图3只是为了说明内邻区域两端颜色相同时的填色方法。
1.3 3级(及以下)图形
图5 n+1级封闭图形的填色示意 |
对于3 级(及以下)的封闭图形,其内邻区域、外邻区域的情况与2级封闭图形完全相同(见图4上部),其充填方法可以递推下去。
假设n级封闭图形的外邻区域已经填色完成(如图5中左下方的封闭图形3),即对于n+1级图形,此填色方法仍然成立(如图5中阴影部分,图形4):
如图5中阴影部分,内邻区域两端的颜色相同(皆为1),取上级和一端的颜色3和1,从左上开始,顺时针做奇偶交替充填,最后需使用备用色2。即填入3-1-3-1-3-2。
同样,对于n+2级图形,阴影部分右上侧图形3,可填入4-1-4。
在填图时,可以从整幅地图的中部开始,周圈地向外扩散。这样,任何一个刚刚填色的封闭图形,其空白的外邻区域边界线,都是一段连续的弧形边界,被短线分割成奇数或偶数段,按上述填色方法总能充填,直到图框,没有外邻为止。即整幅地图填色完毕。
2 解的讨论
2.1 上述解的依据
很明显,上述解答不尽完善。何以肯定其正确性?根据是:
平面上边数最少的封闭多边形是△,它形成一个封闭边界,将内、外两部分完全分开(图6.a)。将各边扩充为封闭图形,图中沿边扩充为近梯形的四边形(图6.b),当然可以变形,如双边变为弧形等(图6.c),还可以变化、扭曲为任意的不规则形状。但有一点是可以肯定的:
平面上最少需要3个封闭图形,它们两两相邻,会围成一个封闭的区域,将其与外部完全分开。
图6 基本图形 |
由此推出,平面上任意形状的封闭图形,能够两两相邻的最多只能是四个:三个两两相邻,加上其周边(内或外)的一个,与这3个两两相邻。对其周边或内部进行任意的划分,使图形增加,都不能形成五个两两相邻的封闭图形。图6.d、f中增加红线后形成的5个封闭图形,就不再两两相邻(d中下部与右上、左边与右下不相邻,f中1与3不相邻)。因为某三个封闭图形两两相邻形成的封闭边界,会把另外两个图形完全分离开。图6.e、f是简化形式,相当于3个相邻的边界封闭图形,只看到了内部区域边界处的一个角。其中,b和e是对应的。
既然平面上能够两两相邻的封闭图形最多只有四个,用颜色区分,四种就足够了。
2.2 有待研究的问题
2.2.1 解答不成立的条件
对于地图来说,如果要使此解答不成立,除非遇到这样的情况:某一个国家有“飞地”、“飞地”与本土必须用同一种颜色充填、本土与其周围的国家已经用了四种颜色,且填色进行到“飞地”周围时,“飞地”周围恰好包含其本土的颜色——这完全有可能,则“飞地”就不能正确填色了。实际地图上是否存在这样的“飞地”?“飞地”是否有必要与本土充填同一种颜色?本文不做解答。
2.2.2 国中国的情况
国中国的情况比较复杂:国中国可以分为2种情况,一种是内部国家被一个外部国家完全包围,一种是内部国家被若干个国家包围,可称为部分包围。
1、完全包围时,外部国家可以作为一个整体封闭图形考虑,没有问题。由于内部国家的外围必须用同一种颜色充填,内部的若干个处于外围边界处的国家可用的颜色只有三种。但不处最外围的国家,仍可以用第四种颜色。当内部国家很少时,比如3-5个,可以解决。如果有很多,根据上述解答,不能保证最外围国家只用3种颜色,所以,就无解。但至少在内部国家少于8个时,不论如何拼合,都是可以充填的。实际地图上,也没有这么多国中国。至于内部国家总数是多少?处于什么样的拼合状态,内部国家的颜色就不能充填?有待进一步研究。
2、部分包围时,如果被包围的只有一个国家,应该首先考虑外部国家统一填色,再考虑内部国家。例如把图5稍做修改,加一条曲线,将图形1变为国中国(图7.a),原来填色就不正确:红色线两端的两个封闭图形的颜色3相同且相邻。
正确的做法:遇到国中国时(图7.b中,阴影区的外邻,从左上开始填了3-1-3,遇到国中国),先考虑外部国家颜色,应为1,进行奇偶填色(图7.c),后填国中国的颜色,应该为颜色2。这时,需要用到奇偶交替色之外的补充颜色。
c |
b |
a |
图7 遇到国中国时的填色 |
上述做法会不会遇到不能填色的情况?
一般情况下,部分包围的国中国,是某级图形的外部区域按奇偶顺序填色时,发现某个封闭图形(图8中空白的封闭图形)填色后,按奇偶顺序邻近它的下一个图形会绕过它的封闭边界,同时连接到填色顺序中的上一个图形和上一级图形(图8.a);或者,同时连接到上
图8 部分包围国中国的基本图形 |
a b |
一级图形(图8.b)。
可见,遇到部分包围的国中国时,它的全部外邻国家要么有3个,要么有2个,都已经填色,并且将它完全封闭。所以,至少可以用一种颜色对国中国进行充填。除此之外,就不必把它当国中国对待,至少处理当前图形的外邻区域时,不会发现它是国中国。可能处理下级图形时才会发现,那时再按国中国处理。
如果被包围的国中国不止1个(如图8中的国中国内部被短线分为若干部分,即:空白区域是若干个国家综合后形成的外围边界线),会怎么样?至少在内部国家少于5个时,都是可解的。实际地图上,也没有这么多嵌套的国中国。至于内部国家总数是多少?处于什么样的拼合状态,就不能充填?有待进一步研究。
2.2.3 海洋的填色
全世界的海洋是连在一起的,将各大洲包围起来,成为几个最大的完全包围国中国。所以,如果考虑将海洋填为1种颜色,各大洲的国家用3加1种颜色充填,理论上是不可能的,情况与完全包围的国中国完全相同。
图9 边界共点 |
2.2.4 边界共点
本文的边界共点,是指某个封闭图形的外部区域边界被短线分成若干段时,某些段的端点处不止1条短线,图9中A点有2条,B点有3条。分别在边界线处交与一点。填色时,不能按边界的分段,应该按短线分割区的顺序奇偶排列。这很容易理解。
3 结论
对四色问题,用边界的奇偶排列这一初等方法,对实际平面地图而言,应该已经解决。考虑球体表面时,如果将大洋作为边框,也能解决。因为实际地图上,国中国的个数毕竟是有限的少数。要想在理论上完美解决,需要对国中国进行深入研究。
参考文献
[1] 颜宪邦,屈姿朴.四色定理论证.航空计算技术[J],2003,33(2):55-59
[2] 何宗光,何宗明.四色定理的证明.中国教育与教学[J],2005,3(1):27-29
[3] 王刚.从欧拉解决七桥问题看数学问题解决方法.新乡师范高等专科学校学报[J],2005,19(2):121-122
A simple method to solve 4-color problem of a map
YANG Zhen-fa
(North China Institute of Water Conservancy and Hydroelectric Power, Zhenzhou 450011,China)
Abstract: The 4-color problem of a map has perplexed us for years. By studying adjacent regions’ array, a simple method was put up to solve it successfully. The regions encircled by other one need to be studied later.
Key words: four-color problem; adjacent region; odd and even
作者简介:河北栾城人,华北水利水电学院 Email:zhfayang@126.com
四色问题的一个简单解相关推荐
- 用python写一个简单的爬虫_Python实现简易Web爬虫详解
编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...
- fatjar打包mysql_一个简单的解压ZIP Excl文件---gt;按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中。 - 明月 - ITeye博客...
写道 一个简单的解压ZIP Excl文件--->按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中. package common.gaoyang; impo ...
- http服务器响应格式,熟悉Http协议的请求和响应格式,编写一个简单的Http服务器。
基本要求:1 正确解...
熟悉Http协议的请求和响应格式,编写一个简单的Http服务器. 基本要求: 1 正确解 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 熟悉Http协议的请求和响应格 ...
- 制作一个简单的轮播图(详解新手教学)
制作一个简单的轮播图(详解新手教学) 相信很多初学者,无论是前端还是后端,对于制作页面时,都想自己亲手制作一个轮播图. 如何制作一个轮播图: 基础知识:有HTML,Css,js基础 本文使用技术: H ...
- swt包下载,swt包引入(一个简单的SWT程序实例及详解)
让我们从简单的 HelloWorld 应用程序开始. swt包下载可以在eclipse网站上下 进到下面这个地址里 http://www.eclipse.org/downloads/download. ...
- 一个简单的C语言程序(详解)
C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h>int main(void) //一个简单的 C程序 {int num; //定义一个名为 n ...
- 简单跑酷java代码_如何实现一个简单的跑酷游戏?(代码详解)
本篇文章给大家带来的内容是介绍如何实现一个简单的跑酷游戏?(代码详解).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 采用的物理引擎是:Phaser.js 官网地址:http:// ...
- 构造一个简单的操作系统内核,详解进程切换细节
(1)基本功能介绍 如题,本文将介绍如何构造一个简单的操作系统内核(基于内核版本3.9.4 ).它有以下功能: 1:进程的管理 2:进程的初始化 3 : 进程基于时间片的调度 (2)实操步骤 1 安装 ...
- Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)
上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页 了解了LigerUI 中Grid的基本用法 现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面. ...
最新文章
- Linux下文件的三种时间戳
- android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
- 从小部件的调整入手,AI 让你秒变时尚达人
- 随笔 —— 当下不晚
- Linq to sql 消除列重复 去重复
- python之shutil模块
- 计算机词汇查询,计算机辅助英语词汇查询系统的设计.doc
- jqGrid 中的editrules来自定义colModel验证规则
- python读取word内容存入数据库、并求simhash_介绍一个基于simhash作海量文章排重的库:simhashpy...
- 你都有哪些丢人的经历?
- C++支持参数个数不确定的函数
- C++11 chrono库
- qdtuling.xyz 7.10
- .bat脚本初体验——使用批处理bat清洗文件名
- banner代码分析
- kaggle自动驾驶竞赛铜牌总结:Peking University/Baidu - Autonomous Driving—(Part 1)
- 二本本科,银行外包开发工作 4 个月有余。聊聊外包公司工作的一些真实感受!...
- JavaWeb----Ajax技术
- win8信息服务器不可用怎么办,Win8打印机出现RPC服务器不可用怎么办?
- 编程计算下面的分段函数: y=e​√​x​​​​​−1 (0<x<1) y=|x|+2 (3≤x≤4) y=sin(x​2​​) (当x取其他值时)