|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Vladimir Vassilevsky 2:5020/175.2 06 Jul 2003 17:57:34 To : slavik levchenko Subject : перебор комбинаций -------------------------------------------------------------------------------- Sun Jul 06 2003 10:54, slavik levchenko wrote to all: sl> /re, all. sl> срочно нужна программа/функция/алгоритм, которая получает на входе sl> набор символов (массив) и выводит всевозможные комбинации перестановок sl> данных символов. желательно на С. sl> заранее благодарен! #include <stdio.h> /* (c) VLV */ unsigned int Factorial(unsigned int n) { unsigned int i,f = 1; for(i = 2; i <= n; i++) f *= i; return f; } //----------------------------------------------- // Generate combination i from n! combinations // // void GetCombination(unsigned int *c, unsigned int n, unsigned int i) { unsigned int j,k,l,m; for(k = 0; k < n; k++) c[k] = n; m = 0; j = Factorial(n); for(k = n; k >= 1; k--) { j /= k; l = i/j; i -= l*j; l++; do { do { if(++m == n) m = 0; } while(c[m] != n); } while(--l); c[m] = k-1; } } //-------------------------------------------- // #define N 5 void main(void) { unsigned int i,j,Nfact; unsigned int c[N]; Nfact = Factorial(N); for(i=0;i<Nfact;i++) { GetCombination(c, N, i); printf("\n"); for(j=0;j<N;j++) printf(" %u",c[j]); } printf("\n"); } VLV "Все построено на силах природы с разрешения месткома" (c) Булгаков --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/3300c20ab38e.html, оценка из 5, голосов 10
|