Algoritmo para calcular las permutaciones de una lista
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.
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.
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.
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.
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
// 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
