94
правки
Изменения
Нет описания правки
== Псевдокод получения следующего кода Грея ==
Пусть нам известен код Грея для длины $n - 1$, записанный в массив из строк $sperm[i](j)$, где $i$ - номер перестановки , а $j$ номера элементов перестановок(номерация начинается с единицы, элементы разделены пробелами). При этом переменная $t = true$, $j = 1$, а $k$ является новым элементом:
procedure grey_code(t: boolean; j: integer);
var
begin
if j <= (n - 1)! then {условие выхода из рекурсии}
if t = true then
begin
for i := 0 to n - 2 do
begin
c := strperm[2 * j](i + 1]); {меняем элементы местами и выводим каждую новую перестановку} strperm[2 * j](i + 1] ) := strperm[2 * j](i + 3]1); strperm[2 * j](i + 3] 1) := c; for l := 1 to n do writeln(strperm[j](1), ' '); {выводим перестановку}
end;
grey_code(not t, j + 1); {повторяем процедуру}
else
begin
for i := n - 2 downto 0 do
begin
c := strperm[2 * j](i + 1]); {меняем элементы местами и выводим каждую новую перестановку} strperm[2 * j](i + 1] ) := strperm[2 * j](i + 3]1); strperm[2 * j](i + 3] 1) := c; for l := 1 to n do writeln(strperm[j](1), ' '); {выводим перестановку}
end;
grey_code(not t, j + 1); {повторяем процедуру}