多年前写的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

四色问题的一个简单解相关推荐

  1. 用python写一个简单的爬虫_Python实现简易Web爬虫详解

    编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...

  2. fatjar打包mysql_一个简单的解压ZIP Excl文件---gt;按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中。 - 明月 - ITeye博客...

    写道 一个简单的解压ZIP Excl文件--->按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中. package common.gaoyang; impo ...

  3. http服务器响应格式,熟悉Http协议的请求和响应格式,编写一个简单的Http服务器。 基本要求:1 正确解...

    熟悉Http协议的请求和响应格式,编写一个简单的Http服务器. 基本要求: 1 正确解 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 熟悉Http协议的请求和响应格 ...

  4. 制作一个简单的轮播图(详解新手教学)

    制作一个简单的轮播图(详解新手教学) 相信很多初学者,无论是前端还是后端,对于制作页面时,都想自己亲手制作一个轮播图. 如何制作一个轮播图: 基础知识:有HTML,Css,js基础 本文使用技术: H ...

  5. swt包下载,swt包引入(一个简单的SWT程序实例及详解)

    让我们从简单的 HelloWorld 应用程序开始. swt包下载可以在eclipse网站上下 进到下面这个地址里 http://www.eclipse.org/downloads/download. ...

  6. 一个简单的C语言程序(详解)

    C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h>int main(void) //一个简单的 C程序 {int num; //定义一个名为 n ...

  7. 简单跑酷java代码_如何实现一个简单的跑酷游戏?(代码详解)

    本篇文章给大家带来的内容是介绍如何实现一个简单的跑酷游戏?(代码详解).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 采用的物理引擎是:Phaser.js 官网地址:http:// ...

  8. 构造一个简单的操作系统内核,详解进程切换细节

    (1)基本功能介绍 如题,本文将介绍如何构造一个简单的操作系统内核(基于内核版本3.9.4 ).它有以下功能: 1:进程的管理 2:进程的初始化 3 : 进程基于时间片的调度 (2)实操步骤 1 安装 ...

  9. Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)

    上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页 了解了LigerUI 中Grid的基本用法  现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面. ...

最新文章

  1. Linux下文件的三种时间戳
  2. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
  3. 从小部件的调整入手,AI 让你秒变时尚达人
  4. 随笔 —— 当下不晚
  5. Linq to sql 消除列重复 去重复
  6. python之shutil模块
  7. 计算机词汇查询,计算机辅助英语词汇查询系统的设计.doc
  8. jqGrid 中的editrules来自定义colModel验证规则
  9. python读取word内容存入数据库、并求simhash_介绍一个基于simhash作海量文章排重的库:simhashpy...
  10. 你都有哪些丢人的经历?
  11. C++支持参数个数不确定的函数
  12. C++11 chrono库
  13. qdtuling.xyz 7.10
  14. .bat脚本初体验——使用批处理bat清洗文件名
  15. banner代码分析
  16. kaggle自动驾驶竞赛铜牌总结:Peking University/Baidu - Autonomous Driving—(Part 1)
  17. 二本本科,银行外包开发工作 4 个月有余。聊聊外包公司工作的一些真实感受!...
  18. JavaWeb----Ajax技术
  19. win8信息服务器不可用怎么办,Win8打印机出现RPC服务器不可用怎么办?
  20. 编程计算下面的分段函数: y=e​√​x​​​​​−1 (0<x<1) y=|x|+2 (3≤x≤4) y=sin(x​2​​) (当x取其他值时)

热门文章

  1. HTML5制作通栏有点设计,12个鲜为人知的HTML 5设计小技巧
  2. 一张图掌握项目复盘的方法和步骤
  3. JVM必会Java GC,助你过五关斩六将
  4. vue3+ts+element-plus密码强弱校验+密码自定义规则校验
  5. 重装系统后使用VirtualBox新建虚拟机时遇到的错误—创建VirtualBoxClient COM对象失败
  6. 系统集成项目管理之信息系统集成专业技术知识
  7. HTML页面背景渐变
  8. Active Directory管理
  9. 忆软件架构师考试之旅
  10. 【计算机视觉4】相机标定