Bon voilà j'ai besoin de savoir si il existe un algorithme capable d'orienter un graphe non orienté :
![]()
Le point en bleu est considéré comme le départ et c'est le seul noeud ayant 2 arcs, les autres en ont 3.
On lui donne l'orientation de départ :
![]()
et le résultat doit être ca :
![]()
S'il vous plaît aidez moi (et si vous pouvez essayez de répondre en langage humain(pas trop de termes mathématiques si possible))
note : le graphe ne contient pas de portions non orientables (cf. ici)
l'adresse du post original est : http://www.tigen.org/pws/forum/index.php?action=sujet&forum=5&cat=115&topic=1559&page=1
pour voir les solutions qui ont déja été proposées.
(j'ai pas encore bien étudié celle de geogeo)
Voici celle que m'a donné Squale92 par mail :
Glop !
après un peu de réflexion, voici peut-être un petit quelque chose qui
pourrait
peut-être te donner quelques idées...![]()
ci-joint, le graphe avec les noms de noeuds
Quand je dis qu'on détermine un lien, ou qu'on l'a, c'est qu'on a
trouvé son
sens.
je marque ça noeud1 -> noeud2
quand je parle de fils, c'est uniquement de fils directs (père/fils ;
PAS
grand-père/fils)
Tous tes noeuds sont non visités au départ
Tu connais le noeud de départ, et tu sais par quel arc tu commences.
Tu pars de Z pour aller à A
=> Tu marques le lien Z -> A et tu met A dans la file (file = A)
Z reste non visité.
Tu es en A. tu l'enlèves de la file (file = )
Tu veux visiter tous les noeuds qui sont fils de A et dont les liens ne
sont
pas déjà marqués.
=> Tu vas aller visiter B et C (tu les met dans une file, qui contient
maintenant B C)
=> Tu fait les liens A -> B et A -> C
Tous les liens touchant A sont définis => tu marques A comme visité.
à présent, les noeuds sur lesquels tu sais comment arriver, mais pas
comment
partir sont B et C.
commençons par B (on le sort de la file : C)
tu cherches à visiter tous ses fils => D (la file contient maintenant C
D)
tu marques les deux liens B -> D
à présent, tous les liens touchant B sont déterminés
=> On traite C (file = D)
les fils de C sont E et F (file = D E F)
=> tu déterminées C->E et C->F
tous les liens touchants C sont définis
On a à présent 3 noeuds en partie traités (on y arrive, mais n'en part
pas) :
D, E, et F
commençons pas D (file = E F)
on visites tous ses fils
=> on a le lien D->L (file = E F L)
On a traité tous les liens touchant D => on passe aux autres qui
étaient non
traités. (il reste E et F)
passons au suivant dans notre file (file = F L)
on est en E , on explore ses fils : I (file = F L I)
on marque les deux liens E->I
E est fini d'être traité => on passe au suivant dans la file
file = L I
on est sur F, on explore ses fils; il a J comme fils (file = L I J)
On marque F->J (les deux liens)
il n'y a plus de liens touchant F qui ne sois pas déterminé
=> on passe au suivant dans la file
le suivant est L (file = I J)
les fils de L sont Z (file = I J Z)
on marque L->Z
suivant dans la file : I (file = J Z)
fils de I est K ; on ajoute K à la file (file = J Z K)
on marque I -> K
on a traité tous les liens touchant I, on passe au suivant de la file
suivant dans la file est J (file = Z K)
on a pour fils de J K
=> On marque J->K est vu que K est déjà dans la file, on ne l'y remet
pas.
on a traité tous les fils de J, on passe au suivant dans la file
suivant dans la file est Z. (file = K)
on a déjà marqué tous les liens arrivant à Z, et tous les liens en
partant
on ne peut donc plus rien faire avec Z
on passe au suivant dans la file
le suivant dans la file est K (file = )
on a déjà marqué tous les liens touchant K
on ne peut donc plus rien faire avec K
la file est vide => on a fini.
En somme, pour résumer
on met le premier noeud de notre parcours (pas celui de départ, donc)
dans une
file
on détermine les chemins entre lui est ses fils direct, et on marque
leur sens
on ajoute ces fils à la file
et tant que la file n'est pas vide, on recommence : on supprime le
premier de
la file, on marque les liens vers ses fils, on ajoute ces fils à la
file, et
on passe au suivant dans la file
enfin, y'a peut-être des cas pour lesquels ça peut foirer, on sait
jamais...
bon courage pour tester
et son graphe joint :

toutes les solutions proposées m'ont l'air d'être un bon début pour la solution mais elle ne sont pas sures à 100%
apparament

Merci à celui qui aura la solution miracle (de preference facile à implémenter
