Recursion - Algo - Programmation
Marsh Posté le 04-04-2006 à 22:35:00
ton exemple est pas logique (ou confu?)
a quoi correspondent les combinaisons désirées?
peut tu donner un exemple plus clair et plus petit, avec juste AB et 12?
Marsh Posté le 04-04-2006 à 23:02:15
je crois que j'ai compris.
Je ferais ça avec une file et un marqueur de fin de file :
intialisation de l'algo
on met dans la file le contenu de toutes les cellules de la première ligne
on met le marqueur de fin de file
fin de l'intialisation
algo proprement dit
pour toutes les lignes li restant à faire
tant que l'element e_f extrait de la file est différent du marqueur de fin de file faire
pour tous les cellules c_i de la ligne l_i faire
créer un nouvel élement n_e en ajoutant a la fin de e_f l'élément c_i
mettre dans la file n_e
fin pour
fin tant que
mettre dans la file le marqueur de fin de file
fin pour
A la fin, tu as dans la file tous les éléments voulus. (si j'ai bien compris ce que tu voulais).
Marsh Posté le 04-04-2006 à 23:24:30
Ok, merci pour le conseil, je vais tester ca.
Je redonne un exemple sous forme d'arbre si ca peux aider :
La liste des combinaisons que je désire ressemble à ca :
A1 A2
/ \ ...
B1 B2
/ | \ ...
C1 C1 C1
| | ...
D1 D1
/ | \ | \ \
E1 E2 E3 E1 E2 E3
Sachant que le chemin en rouge représente une des combinaisons souhaité.
Marsh Posté le 04-04-2006 à 19:55:35
Bonjour tout le monde,
Je vous expose mon probleme :
Jai une table de X lignes contenant chacune une cellules de Y possibilitées. Je voudrais developper (En Delphi 5 sur WinXp pro), une fonction me permettant dobtenir toute les combinaisons possibles.
Exemple :
Table Combinaisons désirées:
Lignes Cellules
A 1;2;3; -> A1 A1 A1 A1 A1 A1 A1
B 2; -> B2 B2 B2 B2 B2 B2 B2
C 1; -> C1 C1 C1 C1 C1 C1 C1
D 1;2;3; -> D1 D1 D1 D2 D2 D2 D3
E 1;2;3; -> E1 E2 E3 E1 E2 E3 E1
Il est clair que la solution passe par une fonction récursive, mais je narrive pas à mettre le doigt sur la logique à suivre.
Jai pour linstant développer lalgo suivant (Naturellement il ne marche pas) :
Procedure RecursSearch(TableOrigine, TableSauvegarde)
//Boucle sur le nombre de possibilités contenu dans la cellule (A1, A2, A3 : i =3)
Pour i = 0 tant que i < TableOrigine[PosCourante].NombreContenu alors
//On Copie lentrée courante (A1, D3, E2, ...) dans la table de sauvegarde
TableSauvegarde.NouvelEnregistrement.IndexChoisi <- TableOrigine[PosCourante].Index[i]
//Si il ny a plus de ligne on à un combinaison complete, sinon on boucle
Si TableOrigine[PosCourante].Fin = faux alors
TableOrigine.PosSuivante //Saut à la ligne suivante dans la table dorigine
RecursSearch (TableOrigine, TableSauvegarde) //Recursion
Fin Si
Fin Pour
Fin Procedure
Quelquun saurais-til, par hasard, ou trouver un exemple dalgorithme pouvant résoudre ce probleme sur lequel je marrache les cheveux depuis déjà beaucoup trop longtemps ??
Merci davance
Bye