PROGRAM MARRIAGE(INPUT,OUTPUT); (*N. WIRTH: ALGORITHMEN UND DATENSTRUKTUREN *) (*S. 210 2.3.1985 FLORIAN MATTHES *) CONST N=8; TYPE MAN=1..N;WOMAN=1..N;RANK=1..N; VAR M:MAN;W:WOMAN;R:RANK; WMR:ARRAY[MAN ,RANK ]OF WOMAN; MWR:ARRAY[WOMAN,RANK ]OF MAN; RMW:ARRAY[MAN ,WOMAN]OF RANK; RWM:ARRAY[WOMAN,MAN ]OF RANK; X :ARRAY[MAN] OF WOMAN; Y :ARRAY[WOMAN] OF MAN; SINGLE:ARRAY[WOMAN]OF BOOLEAN; PROCEDURE PRINT; VAR M:MAN;RM,RW:INTEGER; BEGIN RM:=0;RW:=0; FOR M:=1 TO N DO BEGIN WRITE(X[M]:4); RM:=RM+RMW[M,X[M]];RW:=RW+RWM[X[M],M] END; WRITELN(RM:8,RW:4) END;(*PRINT*) PROCEDURE TRY(M:MAN); VAR R:RANK; W:WOMAN; FUNCTION STABLE:BOOLEAN; VAR PM:MAN; PW:WOMAN; I,LIM:RANK;S:BOOLEAN; BEGIN S:=TRUE;I:=1; WHILE (IRWM[PW,Y[PW]] END; I:=1;LIM:=RWM[W,M]; WHILE (IRMW[PM,X[PM]] END; STABLE:=S END;(*STABLE*) BEGIN (*TRY*) FOR R:=1 TO N DO BEGIN W:=WMR[M,R]; IF SINGLE[W] THEN IF STABLE THEN BEGIN X[M]:=W;Y[W]:=M;SINGLE[W]:=FALSE; IF M