(20分,每空4分)
4色问题。 设有下列形状的图形:(N=8),其编号为1,2,……,N。
图形之间的相邻关系用下面的邻接矩阵表示:
其中:1——相邻,0——不相邻。
[程序要求] 将上面图形的每一个部分涂上红(1),黄(2),蓝(3),绿(4)四种颜色之一,要求相邻的部分有不同颜色。
输入方式:邻接矩阵。
输出方式:区域、颜色。
…………
[算法描述] 用数组R:ARRAY[1..N,1..N] OF 0..1表示相邻关系,S:ARRAY[1..N] OF INTEGER 表示颜色。
采用回溯的方法,首先给第一个图形涂上红色(1),然后在下面的图形中依次涂上其他颜色,当有矛盾时回溯解决。
PROGRAM EXP2(INPUT,OUTPUT);
CONST N=8;
VAR I,J,K:INTEGER;
R:ARRAY[1..N,1..N] OF 0..1;
S:ARRAY[1..N] OF INTEGER;
BEGIN
FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO N DO READ(R[I,J]); READLN
END;
S[1]:=1 ;I:=2; J:=1;
WHILE I<=N DO
BEGIN
WHILE (J<=4) AND (I<=N) DO
BEGIN
K:=1;
WHILE (K<I)AND(S[K]*R[I,J])<>J DO
K:=K+1;
IF K<I THEN J:=J+1
ELSE BEGIN
S[I]:=J ; I:=I+1; J:=1
END
END;
IF J>4 THEN BEGIN
I:=I-1; J:=S[I]+1 ;
END;
END;
FOR I:=1 TO N DO WRITELN(I,'?',S[I])
END.