Помощь - Поиск - Пользователи - Календарь
Полная версия: перестановки.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
bobik
Дана перестановка. Найдите число циклов в ней.

Входные данные
Число N (1 <= N <= 10000), затем перестановка.

Выходные данные
Выведите ответ.
и еще:
Дана перестановка. Наименьшее число обменов, чтобы ее отсортировать.

Входные данные
Число N (1 <= N <= 10000), затем перестановка.

Выходные данные
Выведите ответ.

Желателен код.
virt
program perestanovka;
var n : integer;
    a : array[1..2,1..10000]of integer;
    i : integer;
    b : array[1..10000]of boolean;
    c : integer;

procedure getcycle(ii : integer);
begin
   b[ii] := false;
   if b[a[2,ii]] then getcycle(a[2,ii]);
end;

begin
   fillchar(b,sizeof(b),true);
   read(n);
   for i := 1 to n do read(a[1,i]);
   for i := 1 to n do read(a[2,i]);
   c := 0;
   for i := 1 to n do
      if b[i] then
         begin
            c := c + 1;
            getcycle(i);
         end;
   writeln(c);
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.