|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Dmitry Pankov 2:5022/58.27 01 Oct 2001 17:24:58 To : Evgeniy Jirnov Subject : Все перестановки... -------------------------------------------------------------------------------- 29 сентября 2001 года (а было тогда 09:56) Evgeniy Jirnov в своем письме к All писал: EJ> Есть несколько чисел, хочется получить сабж этих чисел: EJ> Hапример: 1,2,3(n=3) EJ> Все перестановки(n!): EJ> 1,2,3 EJ> 1,3,2 EJ> 2,1,3 EJ> 2,3,1 EJ> 3,1,2 EJ> 3,2,1 Вроде оно... ======== Hачало permutat.cpp ======== /* Программа оперирует с массивом a[1]..a[n], в котором хранится перестановка чисел 1..n. Рекурсивная процедура generate в такой ситуации печатает все перестановки, которые на первых t позициях совпадают с перестановкой a; по выходе из нее переменные t и a имеют те же значения, что и до входа. */ #include <conio.h> #include <stdio.h> #define MAX 30 typedef int vector[MAX]; // объявление нового типа void generate(int n, int t, vector a) { int i,j; // счетчики циклов int k; // временная переменная if(t==n) { for(i=1;i<=n;i++) printf("%d",a[i]); printf("\n"); } else { // t<n for(j=t+1;j<=n;j++) { k=a[t+1]; a[t+1]=a[j]; a[j]=k; // поменять местами a[t+1] и a[j] generate(n,t+1,a); // рекурсивный вызов k=a[t+1]; a[t+1]=a[j]; a[j]=k; // поменять местами a[t+1] и a[j] } } } void main() { int i; // чсетчик цикла int n; // количество элементов массива vector a; // массив с числами clrscr(); printf("Введите кол-во чисел не больше %d: ",MAX); scanf("%d",&n); // составление массива с числами for(i=1;i<=n;i++) { printf("Введите %d число: ",i); scanf("%d",&a[i]); } printf("\nПерестановки:\n"); // запуск рекурсивной функции печати перестановок generate(n,0,a); puts("\nДля продолжения нажмите любую клавишу . . ."); getch(); } ======== Конец permutat.cpp ======== С наилучшими пожеланиями, Dmitry *e-mail: panda@tula.net* . Тишина ... Хорошую информaцию трудно добыть. Сделaть с ней что-нибудь - еще труднее --- Win95 UpTime: 00d 02h 39m * Origin: Рабочий день сокращает жизнь на 8 часов (2:5022/58.27) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33783bb8a71b.html, оценка из 5, голосов 10
|