Tester toutes les possibilites [C]

Résolu
seo610 Messages postés 705 Statut Membre -  
seo610 Messages postés 705 Statut Membre -
Bonjour,

Comment faire un programme en C qui teste tout les possibilités d'une chaîne?
ex : abcd

et affiches les résultat.
Dans l'exemple, il y aurait 24 possibilités différente.

merci

1 réponse

  1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
     
    Bonjour,
    Ce sont des permutations pouvez trouver du code assez facilement la dessus par exemple ici : http://bearcave.com/random_hacks/permute.html
    «Alexander Bogomolyn's unordered permutation algorithm»
    J'ai fait les modifications pour l'utiliser avec une chaîne :
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void print(const int *v, const int size,const char *s)
      {
        int i;
        if (v != 0) {
            for (i = 0; i < size; i++) {
                printf("%c",s[v[i]-1]);
            }
            printf("\n");
        }
      }
    
    void visit(int *Value, int N, int k,const char *s)
      {
        int i;
        static level = -1;
        level = level+1; Value[k] = level;
    
        if (level == N)
            print(Value, N,s);
        else
            for (i = 0; i < N; i++)
                if (Value[i] == 0)
                    visit(Value, N, i,s);
    
        level = level-1; Value[k] = 0;
      }
    
    int main(void)
      {
        const char *test="abcd";
        int i,N,*Value;
        N=strlen(test);
        Value=malloc(sizeof(int)*N);
        for (i = 0; i < N; i++) {
            Value[i] = 0;
        }
        visit(Value, N, 0,test);
        free(Value);
        return 0;
      }
    
    0
    1. seo610 Messages postés 705 Statut Membre 102
       
      parfait, merci
      0