我一直在尝试编写一个代码,该代码将使用四色定理来对由邻接矩阵定义的区域进行着色。邻接矩阵看起来像:
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
}
但我有几个问题:
谢谢!
答案 0 :(得分:1)
您的伪代码看起来更像local search而不是递归/回溯。逻辑返回值为void
,因为本地搜索无法证明没有解决方案,因此通过永久运行来指示失败。 (如果找到,着色本身将通过全局变量返回。)
递归/回溯更像是这样。
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
没有为顶点指定颜色。返回值表示扩展部分着色的尝试是否成功。