Algoritmo para calcular las permutaciones de una lista

mpuebla
03 de Junio del 2004

Alguien podría ayudarme con un algoritmo que me permita calcular las permutaciones de una lista, o lo que es lo mismo, las variaciones de N en N de una lista.

noel solw
03 de Junio del 2004
El numero de permutaciones de una lista de n elementos es factorial de n : n!
Por ejemplo para n + 5, tenemos 5! = 5*4*3*2*1 = 120.
Si necesitas el algoritmo del factorial, avisame, que te lo mando.
Hay dos algoritmos distintos : iterativo y recursivo.

mpuebla
03 de Junio del 2004

OK, eso lo sé.
Parece que no me hice entender muy bien. Yo sé que el número de permutaciones de una lista es n!. Pero lo que necesito es un algoritmo que me dé todas las permutaciones de una lista, no la cantidad. O sea, que devuelva las n! listas que conforman todas las permutaciones posibles de una lista.

Saludos, y muchas gracias de todas formas.

noel solw
03 de Junio del 2004
Aqui va el programa para las permutaciones de una lista de tres lugares. Modificalo de acuerdo a tus necesidades :


// program k3b4.CPP - page 62
// Permutations.
// c++ exercices book - dr. gershon kagan (first edition : 2001)
// written in Borland CPP ver 3.1

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>

#define N 3

int a[N];

void Init()
{
for(int i = 0; i < N; a[i++] = i+1);
} // INIT

void Show()
{
for(int i = 0; i < N; i++)
cout << setw(5) <<a[i];
cout << endl << endl;
} // SHOW

void main()
{
clrscr();
cout << "Permutations of : ";
Init();
Show();
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
{
if(i == j)
continue;
for(int k = 0; k < N; k++)
{
if (k == i || k == j)
continue;
cout << setw(23) << a[i] << setw(5) << a[j]
<< setw(5) << a[k] << endl;
}
}
cout << endl;
cout << "end of program - good bye ! ! !n";
getch();
} // MAIN