Кодинг
★ Рубрика: Кодинг
★ Тема: Алгоритмы

Вывести все перестановки чисел по одному разу

Задача. Написать программу, которая печатала бы все перестановки чисел 1..n по одному разу.
Решение. Программа оперирует с массивом a[1]..a[n], в котором хранится перестановка чисел 1..n. Рекурсивная процедура generate в такой ситуации печатает все перестановки, которые на первых t позициях совпадают с перестановкой a; по выходе из нее переменные t и a имеют те же значения, что и до входа. Основная программа такова:
for i:=1 to n do begin a[i]:=i; end;
 t:=0;
 generate;
вот описание процедуры:
procedure generate;
 | var i,j : integer;
 begin
 | if t = n then begin
 | | for i:=1 to n do begin
 | | | write(a[i]);
 | | end;
 | | writeln;
 | end else begin {t < n}
 | | for j:=t+1 to n do begin
 | | | поменять местами a[t+1] и a[j]
 | | | t:=t+1;
 | | | generate;
 | | | t:=t-1;
 | | | поменять местами a[t+1] и a[j]
 | | end;
 | end;
 end;
 Похожие публикации: Алгоритмы

Войти и комментировать [ Вход | Регистрация ]