当前位置: 首页 > 知识库问答 >
问题:

四色定理

洪伟彦
2023-03-14

我一直在尝试编写一个代码,将使用四色定理对邻接矩阵定义的区域进行着色。邻接矩阵如下所示:

    A B C D

A   0 1 0 1
B   1 0 1 0
C   0 1 0 1
D   1 0 1 0

因此对于这个例子A本身或C不相邻,但它与B和D相邻。

我正在编写的程序必须使用递归和回溯来为定义的区域指定4种颜色(或更少)。

到目前为止我的算法如下:

global int[] colors = <region one color,region two, region three, region four >
public static int color(row,column)
  if out of bounds ??
    loop(!colored)
    {
      case 1: are any adjacent regions this color? assign
      case 2: are any adjacent regions this color? assign.
      case 3: are any adjacent regions this color? assign.
      case 4: are any adjacent regions this color? assign.
      case 5: if nothing found, steal closest (in #) region's color and call method from there
  }

但我有几个问题:

  1. 这个方法会返回什么?
  2. 这是否可行,是否应该有递归/回溯?
  3. 如果给定的行/列超出边界,我将输出什么?

谢谢你!

共有1个答案

闻人博
2023-03-14

您的伪代码看起来更像本地搜索,而不是递归/回溯。逻辑返回将是,因为本地搜索不能证明没有解决方案,所以失败是通过永远运行来表示的。(如果找到着色本身,则通过全局变量返回。)

递归/回溯更像这样。

boolean extend-coloring(partial-coloring):
    if every vertex has a color, then return true
    let v be a vertex without a color
    for each color c,
        if v has no neighbors of color c,
            apply color c to v in partial-coloring
            if extend-coloring(partial-coloring), then return true
            remove color c from v
    return false

根调用是extend coloring(empty coloring),其中empty coloring不为顶点指定颜色。返回值指示扩展部分着色的尝试是否成功。

 类似资料:
  • 目前的问题是,将一张地图分成邻接矩阵中表示的区域,并使用四种颜色对地图进行着色,以确保没有两个相邻区域共享相同的颜色。我们将使用邻接矩阵来编码哪个区域与哪个其他区域相邻。矩阵的列和行是区域,如果两个区域不相邻,则单元格包含0,如果两个区域相邻,则单元格包含1。创建一个递归回溯解决方案,该方案接受用户的交互输入,即地图中的区域数和表示地图组成的邻接矩阵的文件名。 问题是,我遇到的是,第一个值在国家颜

  • Jason Davies图形着色并没有避免我得到具有相同颜色的邻居多边形。 四色定理: 我们知道: 四色贴图定理指出,如果将平面分割成连续区域,生成一个称为贴图的图形,那么为贴图的区域着色所需的颜色不超过四种,因此没有两个相邻区域具有相同的颜色。(维基百科) 以及: 第二,为了定理的目的,每个“国家”必须是一个简单连接的区域,或相邻的区域。[...] 因为[非毗连国家]的领土必须是同一颜色,所以四

  • 我编写了以下程序来递归地实现四色地图定理(简而言之,任何地图只能用4种颜色着色,而没有任何相邻区域是相同的颜色)。一切都在编译,但是我的输出给我错误的数据(每个区域的颜色为-1,而不是现在的值0-3)。我最大的问题是为什么输出不正确。 对于那些想知道的人来说,输入文件是一个邻接矩阵,看起来如下所示: 这是我的代码:

  • 概述 四路颜色传感器使用可见光进行补光,大幅增强了对环境光的抗干扰能力,并且支持在巡线检测的同时进行颜色识别。新的环境光校准功能还能降低环境光对巡线效果的干扰。此外,传感器的数量由两个增加至四个,大大提高了该模块的编程潜力以应用场景。 四路颜色传感器 巡线传感器 塑料外壳 提升耐用性和质量 有 无 巡线传感器 4 个 2 个 颜色传感器 4 个 (与巡线传感器复用) 无 光线传感器 4 个 (与巡

  • 第四课:彩色立方体 欢迎来到第四课!你将学到: 画立方体,代替单调的三角形 加上绚丽的色彩 学习深度缓存(Z-Buffer) 画立方体 立方体有六个方形表面,而OpenGL只支持画三角形,因此需要画12个三角形,每面两个。我们用定义三角形顶点的方式来定义这些顶点。 // Our vertices. Tree consecutive floats give a 3D vertex; Three co

  • 原文:Specifying Colors 在 matplotlib 的几乎所有地方,用户都可以指定颜色,它可以以如下形式提供: RGB 或者 RGBA 浮点值元组,[0, 1]之间,例如(0.1, 0.2, 0.5)或者(0.1, 0.2, 0.5, 0.3)。 RGB 或者 RGBA 十六进制字符串,例如#0F0F0F或者#0F0F0F0F。 [0, 1]之间的浮点值的字符串表示,用于表示灰度,