GAECHKA
Твоя помощница в решении задач

Перестановки в паскаль

Имеется конечное множество исполнителей {х1,...,хn}, каждый из которых может выполнять некоторые из работ {у1,...,уn}. Для каждого исполнителя задано множество работ, которые он может выполнять. Нужно распределить исполнителей по работам, т.е. назначить по одному исполнителю на каждую работу, так, чтобы выполнить все работы. Найти все возможные распределения исполнителей по работам.


вот мои попытки
Program generator_transp; 
{Генератор перестановок}
const 
 n=3; 
 label 1; 
type
 s=set of integer;
 u=array[1..n] of s; 
var 
 p:u; 
 i,z,y,l,v,j:integer; 
 
{-----------------------------------------}
 
Procedure output_p(p:u;y,n:integer); 
{Процедура вывода элементов перестановки на экран}
 
var 
 e:integer; 
begin 
 writeln(' Перестановка элементов');
 write(y, ' ':6);
 for e:=1 to n do write(p[e]:4);
 writeln
end; 
 
{---------------------------------------------}
 
begin 
 writeln('Заданный массив чисел');
 for i:=1 to n do 
 begin 
 include(p[i],1); {Задаются элементы массива} 
 write(p[i]:4)
end; 
writeln; 
z:=1; 
for i:=1 to n do z:=z*i; {Вычисление числа перестановок} 
y:=1; 
output_p(p,y,n);
for y:=2 to z do {Цикл по числу перестановок} 
begin 
 i:=2; j:=1; 
 while p[i-1]=p[i] do i:=i+1; 
 while p[j]= p[i] do j:=j+1; 
 v:=p[i]; p[i]:= p[j]; p[j]:=v; 
 if i=2 then goto 1; 
 for l:=1 to (i - 1) div 2 do 
 begin 
 v:=p[l]; p[l]:=p[i-l]; p[i-l]:=v 
 end; 
1:output_p(p,y,n) 
end 
end.
0
вопрос задан

Источник


0 ответов