Реферат: Генерация комбинаторных объектов

i=N

Пока (i>0) и (B[i]>=B[i+1]), i=i-1

Если i=0 то конец работы

Для j от i+1 до N

если B[j]>B[i] то K=j

Обмен значений B[i] и B[k]

Для j от i+1 до (i+ ((N+1-i) div 2))

Обмен значений B[j] и B[N+i+1-j]

Вывод текущей перестановки B

Понятно, что цикл попарных перестановок "хвоста" массива B нельзя делать от i+1 до N-го элемента - иначе элементы поменяются местами по 2 раза - и получиться, что ничего не изменилось. Цикл нужно выполнить для половины этого "хвоста". Этому и служит несколько сложное для понимания значение конечной переменной цикла: i+ (N+1-i) div 2

Ниже приводится программа, генерирующая все перестановки из N компонент, обозначенных N первыми буквами латинского алфавита.

const

alphabet : string[26] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

var

b : array [1..100] of byte ;

N,i,j,k : byte;

Procedure SwapB(i,k:byte);

var x : byte;

begin

x:=B[i]; B[i]:=B[k]; B[k]:=x;

end;

Procedure WriteB;

begin

for i:=1 to N do write({alphabet[b[i]]);

writeln;

end;

begin

readln(N);

for i:=1 to N do b[i]:=i;

К-во Просмотров: 399
Бесплатно скачать Реферат: Генерация комбинаторных объектов