| tagsOf | Salut à tous,
 J'essaie de trouver un algorithme claire pour pouvoir écrire de manière facile l'algorithme des permutations dons je rappelle brièvement le principe avec un exemple:
 
 Soit un tableau T={1,2,3} (je prend ici 3 valeurs, j'aurai pu en prendre N)
 
 permutation (T);
 
 123
 132
 213
 231
 312
 321
 
 Je précise que j'ai déjà trouvé des fonctions en C qui me permettent cela, je ne les comprend pas complètement, en voici un exemple:
 
 | Code : 
 #include <stdio.h>#include <stdlib.h>void print(const int *v, const int size){  if (v != 0) {    for (int i = 0; i < size; i++) {      printf("%4d", v[i] );    }    printf("\n" );  }} // print
void permutation(int *Value, int N, int k){  static int level = -1;  level = level+1;  Value[k] = level;  if (level == N)    print(Value, N);  else    for (int i = 0; i < N; i++)      if (Value[i] == 0)        permutation(Value, N, i);  level = level-1;  Value[k] = 0;}int main(){  const int N = 4;  int Value[N];  for (int i = 0; i < N; i++) {    Value[i] = 0;  }  permutation(Value, N, 0);  return EXIT_SUCCESS;}
 | 
 
 J'ai trouvé également un algorithme que j'ai essayer d'implementer dont je ne saisis complètement pas la ligne en rouge:
 
 fonction permut (tableau) /* ou un pointeur */
 foreach a in tableau do
 print a
 sous_tableau=tableau - element_a
 if sous_tableau=1case /* test de fin de recurtion */
 then print sous_tableau[0]+cr/lf
 else permut(sous_tableau) /* recurtion */
 end if
 end for
 end fonction
 
 Voici mon essai d'implémentation en C:
 
 | Code : 
 #include <stdio.h>#include <stdlib.h>#include <assert.h>int array[3]={1,2,3};int* sousTableau(int indice, int * tableau, int N){  int curseur=0;  int *sous_tableau=malloc( (N-1)*sizeof(*sous_tableau) );  assert(sous_tableau);  for(int i=0; i<N; i++)    if( i != indice ){      sous_tableau[curseur]=tableau[i];      curseur++;    }  return sous_tableau;}void permutation(int * tableau, int N){  int * sous_tableau=NULL;  for(int i=0; i < N; i++)    {      printf("%d ",tableau[i]);      sous_tableau=sousTableau(i,tableau,N);      if( N == 2){	printf("%d ",sous_tableau[0]);	printf("\n" );      }      else	permutation(sous_tableau, N-1);   }}int main(void){  permutation(array,3);  return EXIT_SUCCESS;}
 | 
 
 L'exécution donne le résultat inattendu suivant:
 
 1 2 3
 3 2
 2 1 3
 3 1
 3 1 2
 2 1
 
 
 Si vous pensez détenir un meilleure algorithme dans le sens plus claire a la compréhension, et plus facile à implémenter, ou tous simplement si vous voyez des erreur dans cet algorithme ou dans mon implémentation, n'hésitez pas à m'en faire part, je vous serez trés reconnaissant !
 
 Merci d'avance pour toutes votre aide !
   
 
   |