Tester toutes les possibilites [C]

[Résolu/Fermé]
Signaler
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
-
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
-
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

Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
53
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;
  }
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
98
parfait, merci