Курсовая работа: Перебор с возвратом

Num:=ch;

end;

procedure Init;{предполагается, что данные корректны и во входном файле они организованы так, как представлены в примере из формулировки задачи}

begin

readln(N);{числожителей}

for i:=1 to N do with A[i] do begin man:=i; part:=[i]; end;{каждыйжительпредставляетсвоюпартию}

for i:=1 to N do begin

while Not eoln do begin read(t);A[t].part:=A[t].part+[i];{житель t представляетпартиюсномером i, илипартиясномером i представленажителем t}

end;

readln;

end;

for i:=1 to N do A[i].number:=Num(A[i].part);

end;

Следующим очевидным шагом является сортировка массива А по значению поля number. Становится понятным и необходимость ввода поля man в структуру записи - после сортировки номер элемента массива А не соответствует номеру жителя острова.

Пока не будем задумываться о том, как сократить перебор. Попытаемся набросать общую схему. Используемые переменные достаточно очевидны, они описываются в процессе их ввода, присвоение начальных значений глобальным переменным осуществляется в процедуре Init .

procedure Include(k:Nint);{включениеврешение}

begin

Rwork:=Rwork+[A[k].man];

Inc(mn);

end;

procedure Exclude(k:Nint);{исключитьизрешения}

begin

Rwork:=Rwork-[A[k].man];

Dec(mn);

end;

procedure Solve(k:Nint;Res,Rt:Sset);

{k- номер элемента массива А; Res - множество партий, которые представлены в текущем решении; Rt - множество партий, которые следует “покрыть” решением; min - минимальное количество членов в парламенте; mn - число членов парламента в текущем решении; Rbest - минимальный парламент; Rwork - текущий парламент; первый вызов - Solve(1,[],[1..N])}

var i:Nint;

begin

блокобщихотсечений

К-во Просмотров: 449
Бесплатно скачать Курсовая работа: Перебор с возвратом