Witam. W książce pt. "Algorytmy+struktury danych = programy" znalazłem kod rozwiązujący problem trwałych małżeństw. Chciałem go skompilować we Free Pascalu, jednak kompilator wywala error 201. Jeśli komuś się trochę nudzi, bardzo bym prosił o sprawdzenie poniższego kodu:
const n=8;
type
mezczyzna = 1..n;
kobieta = 1..n;
pozycja = 1..n;
var
m:mezczyzna;
k:kobieta;
p:pozycja;
kmp:array [mezczyzna,pozycja] of kobieta;
mkp:array [kobieta,pozycja] of mezczyzna;
pmk:array [mezczyzna, kobieta] of pozycja;
pkm:array [kobieta,mezczyzna] of pozycja;
x:array [mezczyzna] of kobieta;
y:array [kobieta] of mezczyzna;
panna:array [kobieta] of boolean;
procedure drukuj;
var
m:mezczyzna;
pm,pk:integer;
begin
pm:=0;
pk:=0;
for m:=1 to n do begin
write(x[m]:4);
pm:=pm+pmk[m,x[m]];
pk:=pk+pkm[x[m],m];
end;
writeln(pm:8,pk:4);
end;
procedure probuj(m:mezczyzna);
var
p:pozycja;
k:kobieta;
function trwale:boolean;
var
t:boolean;
i,lim:pozycja;
pm:mezczyzna;
pk:kobieta;
begin
t:=true;
i:=1;
while (i<p) or t do
begin
pk:=kmp[m,i];
i:=i+1;
if not panna[pk] then t:=pkm[pk,m]<pkm[pk,y[pk]];
end;
i:=1;
lim:=pkm[k,m];
while (i<lim) or t do
begin
pm:=mkp[k,i];
i:=i+1;
if pm<m then t:=pmk[pm,k]>pmk[pm,x[pm]];
end;
trwale:=t;
end;
begin
for p:=1 to n do
begin
k:=kmp[m,p];
if panna[k] then
if trwale then
begin
x[m]:=k;
y[k]:=m;
panna[k]:=false;
if m<n then probuj(succ(m)) else drukuj;
panna[k]:=true;
end;
end;
end;
begin
for m:=1 to n do
for p:=1 to n do
begin
read(kmp[m,p]);
pmk[m,kmp[m,p]]:=p;
end;
for k:=1 to n do
for p:=1 to n do
begin
read(mkp[k,p]);
pkm[k,mkp[k,p]]:=p;
end;
for k:=1 to n do panna[k]:=true;
probuj(1);
readln;
end.