Изменения

Перейти к: навигация, поиск

Коды Грея для перестановок

553 байта добавлено, 06:07, 6 декабря 2011
Нет описания правки
Пусть нам известен код Грея для длины $n-1$, записанный в массив pred_perest[i](j), где $i$ - номер перестановки, $j$ - номер элемента этой перестановки (номерация начинается с единицы).
t := false; {булевская переменная отвечающая за порядок перебора true: от начала к концу false: от конца к началу} for i := 1 to (n-1)! do for k:=1 to n do begin {перебираем все прошлые перестановки}
if t = true then
for j := 1 to n-1 do
begin
pomestit_v vstavka(pred_prestpred_perest[i], t); l := pred_perest[i](j+1); pred_perest[i](j+1) := pred_perest[i](j); pred_perest[i](j) := l; {вставляем в конец, если t := false;true}
writeln(pred_perest[i]);
for j := 1 to n - 1 do {для каждой перестановки делаем n - 1 транспозиций}
begin
swap(pred_perest[i](j), pred_perest[i](j + 1)); {меняем j и j + 1 элементы местами}
t := false;
writeln(pred_perest[i]);
end;
end
else
for j := n-1 downto 1 do
begin
pomestit_v vstavka(pred_prestpred_perest[i], t); l := pred_perest[i](j+1); pred_perest[i](j+1) := pred_perest[i](j); pred_perest[i](j) := l; {вставляем в начало, если t := true;false}
writeln(pred_perest[i]);
for j := n - 1 downto 1 do
begin
swap(pred_perest[i](j), pred_perest[i](j + 1)); {меняем j и j + 1 элементы местами}
t := true;
writeln(pred_perest[i]);
end;
end;
end;
== См. также ==
94
правки

Навигация