Witam. Na podstawie Wrighta postanowiłem zaimplementować algorytm trwałych małżeństw. Program się normalnie kompiluje ale po wpisaniu danych zamyka bez wyświetlenia wyników więc ciężko mi powiedzieć czy te są poprawne. Prosiłbym o pomoc w rozwikłaniu problemu.
program malzensta(input,output);
uses
crt;
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;
licznik:integer;
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);
readln;
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 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; //Trwale
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; //Probuj
begin //Program glowny
for m:=1 to n do
for p:=1 to n do
begin
clrscr;
writeln('Podaj ', p ,' preferencje ',m,' mezczyzny.');
readln(kmp[m,p]);
pmk[m,kmp[m,p]]:=p;
end;
for k:=1 to n do
for p:=1 to n do
begin
clrscr;
writeln('Podaj ', p ,' preferencje ',k,' kobiety.');
readln(mkp[k,p]);
pkm[k,mkp[k,p]]:=p;
end;
for k:=1 to n do
panna[k]:=true;
probuj(1);
readln;
end.
Dane wejściowe:
Dane wyjściowe: