Programa C para imprimir todas las permutaciones de una string dada

Una permutación también llamada «número de arreglo» u «orden» es un reordenamiento de los elementos de una lista ordenada S en una correspondencia uno a uno con S mismo. ¡Una string de longitud n tiene n! permutación. 

Fuente: Mathword ( http://mathworld.wolfram.com/Permutation.html )

A continuación se muestran las permutaciones de la string ABC. 
ABC ACB BAC BCA CBA CABINA

Aquí hay una solución que se usa como base en el retroceso.

NewPermutation

C

// C program to print all permutations 
// with duplicates allowed 
#include <stdio.h> 
#include <string.h> 
  
/* Function to swap values at 
   two pointers */
void swap(char *x, char *y) 
{ 
    char temp; 
    temp = *x; 
    *x = *y; 
    *y = temp; 
} 
  
/* Function to print permutations 
   of string 
   This function takes three parameters: 
   1. String 
   2. Starting index of the string 
   3. Ending index of the string. */
void permute(char *a, int l, int r) 
{ 
    int i; 
    if (l == r) 
        printf("%s\n", a); 
    else
    { 
        for (i = l; i <= r; i++) 
        { 
            swap((a + l), (a + i)); 
            permute(a, l + 1, r); 
  
            //backtrack 
            swap((a + l), (a + i)); 
        } 
    } 
} 
  
// Driver code
int main() 
{ 
    char str[] = "ABC"; 
    int n = strlen(str); 
    permute(str, 0, n-1); 
    return 0; 
} 

Producción: 

ABC
ACB
BAC
BCA
CBA
CAB

Paradigma de algoritmo: retroceso 

Complejidad de tiempo: O(n*n!) Tenga en cuenta que hay n! permutaciones y requiere O(n) tiempo para imprimir una permutación.

Espacio Auxiliar: O(r – l)

Nota: La solución anterior imprime permutaciones duplicadas si hay caracteres repetidos en la string de entrada. Consulte el enlace a continuación para obtener una solución que imprima solo permutaciones distintas, incluso si hay duplicados en la entrada.
Imprime todas las permutaciones distintas de una string dada con duplicados.  
Permutaciones de una string dada usando STL

Escriba comentarios si encuentra que los códigos/algoritmos anteriores son incorrectos o encuentra otras formas de resolver el mismo problema.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *