回溯法就可以了.
先抽象成数学问题:
将区域抽象成点,区域有公共边界,则在对应点间连线,最后组成一个图.
由于回溯法是对解空间的深度优先搜索,因此在一般情况下可用递归函数来实现回溯法如下:
procedure try(i:integer);
var
begin
if i>n then 输出结果
else for j:=下界 to 上界 do
begin
if 可行{满足限界函数和约束条件} then
begin
置值;
try(i+1); {递归到下一阶段求解};
递归结束,回朔;
end;
end;
end;
说明:
i是递归深度;
n是深度控制,即解空间树的的高度;
可行性判断有两方面的内容:不满约束条件则剪去相应子树;若限界函数越界,也剪去相应子树;两者均满足则进入下一层.
再具体到本问题:
i是染到第几个区域, n就是7, j就是1 to 4(染何种颜色),