Ce programme d'anagramme utilise des permutations circulaires : on effectue N permutations circulaires d'un mot de N lettres, puis, pour chaque permutation, on effectue les permutations circulaires des (N-1) premières (on aurait aussi pu prendre les N-1 dernières) lettres et ainsi de suite...
Source / Exemple :
// Recherche de tous les anagrammes d'un mot <Str> (Point d'entrée)
public void Anagramme(string Str)
{
Anagramme(ref Str,Str.Length);
}
// Methode récursive de calcul des permutations circulaires d'un mot
public void Anagramme(ref string Str, int Lg)
{
if (Lg==1)
Console.WriteLine(Str);
else
{
string strTmp=Str;
// Pour chaque permutation circulaire des Lg premières lettres : appel récursif
// avec les Lg-1 premières lettres
for (int i=0;i<Lg;i++)
{
strTmp=strTmp.Substring(1,Lg-1) + strTmp[0] + strTmp.Substring(Lg);
Anagramme(ref strTmp ,Lg-1);
}
}
}
13 oct. 2007 à 22:19
Au risque de paraitre ridicule, y aurait il une adaptation de ce code en vba-E?
J'ai en effet un problème avec les permutations de 5 mots donc 120 possibilités:
Si ça peut aider en vba on peut écrire:
tableau=split("mot1;mot2;mot3;mot4;mot5",";")
avec
tableau(1)=mot1 et tableau(4)=mot4
Je veux avoir en sortie toutes les 120 permutations possibles des 5 mots.
Merci infiniment
Mon adresse est maestro1303@yahoo.fr
13 avril 2006 à 11:53
12 avril 2006 à 15:09
J'ai testé ce code en C++ et en C# , il fonctionne très bien , dailleur je l'ai déja dit dans un des messages précédents . Ceci dit tres bizarement , j'ai envoyer ce code a Eclipse (en java) ,j'ai donc supprimé retirer le mot clé ref a tous les endroits ou il était mais l'algo ne fonctionne pas du tout en java aussi bizarement que cela puisse paraitre!!
J'ai essayé un autre truc : comme les objets sont tous passés ma reference en java , j'ai crée ma classe Mystring qui contenait une string en données membre et j'ai tenter de l'utiliser de la meme facon que la classe string , mais sans resultat aussi.
Si quelqu'un connait java , peut-il m'expliquer brievement pourquoi?
Merci par avance
1 avril 2006 à 10:59
PROCEDURE anagramme(str1 est une chaîne, str2 est une chaîne)
i est un entier
SI Taille(str1)=1 ALORS Trace(str1+str2)
POUR i=1 TO Taille(str1)
anagramme(Milieu(str1,2,Taille(str1)-1),str2+Gauche(str1,1))
str1=Milieu(str1,2,Taille(str1)-1)+Gauche(str1,1)
FIN
21 sept. 2005 à 14:34
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.