Hola Tomás. Con una simple recursividad lo podés resolver:
private IEnumerable<string> Permutaciones(IEnumerable<string> lista)
{
if (lista.Count() == 1) return lista;
var resultado = new List<string>();
foreach (var elemento in lista)
{
var listaPermutada = Permutaciones(lista.Where(t =>
!t.Equals(elemento)));
foreach(var permutacion in listaPermutada)
resultado.Add(elemento + permutacion);
}
return resultado;
}
Saludos
Lic. José Selesan
2011/9/14 Tomás Corrales Lemoine <[email protected]>
> Hola colegas.****
>
> ** **
>
> ¿Alguien me podría ayudar con algún algoritmo para obtener todas las
> permutaciones posibles de un conjunto finito cualquiera? Por ejemplo, para
> el conjunto de 4 elementos ABCD las posibles permutaciones serían:****
>
> ** **
>
> **1. **ABCD****
>
> **2. **ABDC****
>
> **3. **ACBD****
>
> **4. **ACDB****
>
> **5. **ADBC****
>
> **6. **ADCB****
>
> **7. **BACD****
>
> **8. **BADC****
>
> **9. **BCAD****
>
> **10. **BCDA****
>
> **11. **BDAC****
>
> **12. **BDCA****
>
> **13. **CABD****
>
> **14. **CADB****
>
> **15. **CBAD****
>
> **16. **CBDA****
>
> **17. **CDAB****
>
> **18. **CDBA****
>
> **19. **DABC****
>
> **20. **DACB****
>
> **21. **DBAC****
>
> **22. **DBCA****
>
> **23. **DCAB****
>
> **24. **DCBA****
>
> ** **
>
> Es decir, la cantidad de permutaciones sería igual al factorial de la
> cantidad de elementos del conjunto. En este caso 4! = 4 x 3 x 2 x 1 = 24.
> Agradecería cualquier sugerencia. Gracias.****
>
> ** **
>
> Saludos****
>
> ** **
>
> Ing. Tomás Corrales Lemoine****
>
> --
> Aeropuerto Internacional Frank País García de Holguín.