Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] Генерация циклических перестановок


Автор: tux32 21.11.2007, 08:35
Помогите мне пожалуйста составить процедуру генерации всех циклических перестановок чисел от 1 до n в виде k циклов на Си smile 

Автор: GIK 21.11.2007, 10:01
Цитата

Помогите мне пожалуйста составить процедуру генерации всех циклических перестановок чисел от 1 до n в виде k циклов на Си

По подробнее, не пойму, можно пример привести smile 

Автор: tux32 16.12.2007, 00:09
GIK, 
Алгоритм: в ходе генерации всех n! перестановок проверяем каждую перестановку на кол-во циклов, где каждый шаг осуществляется путём взятия значения элемента с текущей позиции до тех пор пока не придём в начальную позицию.

  Пример: перестановка {5,2,1,4,3}
  1. Извлекаем значение на первой позиции равное 5, идём в пятную позицию, там видим число 3, идём в третью позицию, видим число 1, переходим в первую позицию, пришли туда откуда начинали, попутно отметив первую, третью и пятую позиции. Начинать поиск циклов с этих позиций уже не будем.
  2. Извлекаем значение 2 на второй позиции, переходим во вторую позицию, получился цикл в себя.
  3. Извлекаем значение 4 на четвёртой позиции, получаем цикл в себя.
В итоге, все вершины были пройдены за 3 цикла.

Вот. Значение n, чисел 1...n задаётся пользователем как и кол-во циклов k. Есть у кого-нибудь идеи?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)