2. (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.
3. 多项式加法运算(20分,每空4分)
一个仅含有x的多项式可以用下列的方式表示:
(系数,指数),(系数,指数),…,(0,0)。
其中(0,0)作为结束标志。
例如:P(x)=4x^6-3x^3+2x^2-1
可表示为:(4,6),(-3,3),(2,2),(-1,0),(0,0)
Q(x)=x^4-x+1
可表示为:(1,4),(-1,1),(1,0),(0,0)
当用上面的方式给出2个多项式之后,编制程序对这两个多项式进行加法运算,结果也用上面的方式给出。
例如:上面的P(x)和Q(x)相加的结果为:
4x^6+x^4-3x^3+2x^2-x
表示结果为:(4,6),(1,4),(-3,3),(2,2),(-1,1),(0,0)
[算法描述] 多项式可用数组P表示;分别以p1表示P,p2表示Q,p3表示结果。
处理的过程为将P复制到p3,然后逐项检查Q,当发现有相同的方次时,进行系数相加;当发现没有相同方次时,插入到p3中去。
PROGRAM EXP3(INPUT,OUTPUT)
VAR
X,Y,I,I1,J,J1,J2:INTEGER;
P1,P2,P3 :ARRAY[1..20,1..2] OF INTEGER
BEGIN
J1:=0; WRITE('INPUT P(X)='); READ(X,Y);
WHILE X<>0 DO
BEGIN
J1:=J1+1; P1[J1,1]:=X; P1[J1,2]:=Y; READ(X,Y)
END;
J1:=J1+1; P1[J1,1]:=0; P1[J1,2]:=0;
WRITE('INPUT Q(X)='); READ(X,Y); J2:=0;
WHILE X<>0 DO
BEGIN
J2:=J2+1; P2[J2,1]:=X; P2[J2,2]:=Y; READ(X,Y)
END;
J2:=J2+1; P2[J2,1]:=0; P2[J2,2]:=0;
FOR I:=1 TO J1 DO
BEGIN
P3[I,1]:=P1[I,1]; P3[I,2]:=P1[I,2]
END;
I:=1;
WHILE P2[I,1]<>0 DO
BEGIN
IF P2[I,1]>P3[1,2] THEN
BEGIN
FOR J:=J1 DOWN TO 1 DO
BEGIN
P3[J+1,1]:=P3[J,1]; P3[J+1,2]:=P3[J,2]
END;
P3[I,1]:=P2[I,1]; P3[I,2]:=P2[I,2]; J1:=J1+1
END
ELSE BEGIN
I1:=1;
WHILE P2[I,2]<P3[I1,2] DO
I1:=I1+1 ;
IF P2[I,2]=P3[I1,2] THEN
P3[I1,1]:= P3[I1,1]+P2[I,1] ;
ELSE BEGIN
FOR J:=J1 DOWNTO I1 DO
BEGIN
P3[J+1,1]:=P3[J,1]; P3[J+1,2]:=P3[J,2]
END;
P3[I1,1]:=P2[I,1]; P3[I1,2]:=P2[I,2];
J1:=J1+1 ;
END;
END;
I:=I+1
END;
FOR J:=1 TO J1-2 DO WRITE ('(',P3[J,1],',',P3[J,2],'),');
WRITELN('(',P3[J+1,1],',',P3[J+1,2],')');
END.