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 <to...@hog.ecasa.avianet.cu>

> 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.

Responder a