Tester toutes les possibilites [C]

Résolu/Fermé
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 - 31 mai 2011 à 20:09
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 - 2 juin 2011 à 02:42
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
A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
1 juin 2011 à 17:03
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
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 102
2 juin 2011 à 02:42
parfait, merci
0