parcourir une structure de graphe - Java - Programmation
Marsh Posté le 03-05-2007 à 08:26:42
une fonction recursive est pas mal
fonction parcoursArbre(Noeud noeudCourant)
{
execute(noeudCourant);
Pour chaque noeud dans la liste des fils de noeudCourant
parcoursArbre(noeud);
}
Marsh Posté le 03-05-2007 à 08:47:24
Re,
ok, mais par exemple, sans utiliser la récursion, c'est possible facilement?
Sinon, si y'a pas d'autres solutions, je le ferai en récursif, mais je préférerais eviter.
Merci :-)
Marsh Posté le 03-05-2007 à 08:51:07
avec une pile c'est possible
pile.push(noeudRacine);
tant que ( taille(pile) > 0 )
{
noeudCourant = pile.pop();
Pour chaque noeud dans la liste des fils de noeudCourant
pile.push(noeud);
}
EDIT : ca marche aussi avec une file, ca depend du sens de parcours que tu veux
Marsh Posté le 03-05-2007 à 10:21:34
Re,
ok, pour la version recursive, mais pour la version itérative, j'aimerais qques précisions, si j'ai bien compris avec l'algo qui utilise une pile ca fera en ordre d'exec:
l0, l2, l21, l1, l11 et l2 si on suppose par ex, que l0 a pour successeur l1 et l2, et que l1 a pour successeur l11 et l12 et que l2 a pour successeur l21 et l22?
Tandis qu'avec une queue, ca fera: l0, l1, l2, l11, l12, l21.
C'est bien ca?
Merci :-)
Marsh Posté le 04-05-2007 à 08:07:39
Re,
Bon, je m'en suis bien sorti finalement :-)
Merci :-)
Marsh Posté le 03-05-2007 à 01:03:39
Bonjour,
J'ai une petite question algorithmique à vous poser, si cela ne vous dérange pas.
J'ai une structure de graphe représentant une méthode java en fait.
J'utilise une ArrayList dont les indices 0,1,... vont représenter les différents labels et pour chaque label (donc indice de mon tableau), j'associe un couple par exemple (inst, {2,4,8}) pour dire quaprès avoir executé l'instruction inst, on a plusieurs instructions potentielles à traiter: celles qui se trouvent au label, puis 4 et enfin 8 (donc en allant à l'indice 2 puis 4 et 8 de mon ArrayList).
La liste de labels est ouvent supérieure à 1 quand l'instruction est une conditionnelle par exemple...
Le pb c'est qu'après avoir traité l'instruction inst, je vais tout d'abbord aller au label 2, puis de ce label 2, j'aurais d'autres labels à traiter (pouvant être aussi par exemple ne liste de labels à plus d'un élement...)
Je sais que je termine un parcours quand j'arrive à l'instruction End, mais à ce moment là, faudrait réitérer sur ma liste du depart en allant ensuite au label 4...
Comment me conseillez-vous de faire ca algorithmiquement de facon la plus simple? sachant que forcement si je n'avais qu'un label possible à chaque fois par instruction, c'est facile, pq il suffit de parcourrir une seule fois la liste des différents labels, pour tomber sur le End, et là c'est définitivement fini...
Merci :-)