Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
les_fiches_revisions:algorithmique:algo_graphes [2021/01/12 11:01] lf |
les_fiches_revisions:algorithmique:algo_graphes [2021/01/14 10:36] lf |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
•Le parcours en largeur \\ | •Le parcours en largeur \\ | ||
•le parcours en profondeur | •le parcours en profondeur | ||
+ | •Chercher une chaine dans un graphe | ||
===A quoi ça sert ?=== | ===A quoi ça sert ?=== | ||
Ligne 34: | Ligne 35: | ||
FIN | FIN | ||
</ | </ | ||
+ | |||
+ | Voyez ce programme comme une tache d' | ||
+ | Le programme va d' | ||
+ | \\ | ||
+ | Si on part du point I on aura un ordre de visite de: I , E , H , C , D , G , H , B , F et A \\ | ||
+ | La distance entre le point I et celui visité est indiqué sur le graphe {{: | ||
+ | |||
+ | |||
+ | ==== Le parcours en profondeur==== | ||
+ | |||
+ | Dans le cas du parcours en profondeur, on va chercher à aller "le plus loin possible" | ||
+ | La méthode de découverte est unidirectionnelle.\\ | ||
+ | \\ | ||
+ | < | ||
+ | VARIABLE | ||
+ | G : un graphe | ||
+ | u : noeud | ||
+ | v : noeud | ||
+ | //On part du principe que pour tout sommet u du graphe G, u.couleur = blanc à l' | ||
+ | DEBUT | ||
+ | PARCOURS-PROFONDEUR(G, | ||
+ | u.couleur ← noir | ||
+ | pour chaque sommet v adjacent au sommet u : | ||
+ | si v.couleur n'est pas noir : | ||
+ | PARCOURS-PROFONDEUR(G, | ||
+ | fin si | ||
+ | fin pour | ||
+ | FIN | ||
+ | </ | ||
+ | Sur ce graphe on peut voir le chemin pris par l' | ||
+ | {{: | ||
+ | \\ | ||
+ | \\ | ||
+ | ====Cycle dans les graphes==== | ||
+ | Qu'est qu'un cycle ? \\ | ||
+ | Un cycle est tout simplement une boucle dans un graphe, c'est utile pour savoir s'il est possible d' | ||
+ | L' | ||
+ | < | ||
+ | VARIABLE | ||
+ | s : noeud (noeud quelconque) | ||
+ | G : un graphe | ||
+ | u : noeud | ||
+ | v : noeud | ||
+ | p : pile (vide au départ) | ||
+ | //On part du principe que pour tout sommet u du graphe G, u.couleur = blanc à l' | ||
+ | DEBUT | ||
+ | CYCLE(): | ||
+ | piler(s,p) | ||
+ | tant que p n'est pas vide : | ||
+ | u ← depiler(p) | ||
+ | pour chaque sommet v adjacent au sommet u : | ||
+ | si v.couleur n'est pas noir : | ||
+ | piler(v,p) | ||
+ | fin si | ||
+ | fin pour | ||
+ | si u est noir : | ||
+ | renvoie Vrai | ||
+ | sinon : | ||
+ | u.couleur ← noir | ||
+ | fin si | ||
+ | fin tant que | ||
+ | renvoie Faux | ||
+ | FIN | ||
+ | </ | ||
+ | |||
+ | ====Chercher une chaine dans un graphe==== | ||
+ | Ici nous cherchons à connaitre le chemin entre deux noeuds\\ | ||
+ | :!: cet algorithme renvoie un chemin, ce n'est pas forcement le plus court | ||
+ | |||
+ | < | ||
+ | VARIABLE | ||
+ | G : un graphe | ||
+ | start : noeud (noeud de départ) | ||
+ | end : noeud (noeud d' | ||
+ | u : noeud | ||
+ | chaine : ensemble de noeuds (initialement vide) | ||
+ | |||
+ | DEBUT | ||
+ | TROUVE-CHAINE(G, | ||
+ | chaine = chaine ⋃ start //le symbol ⋃ signifie union, il permet d' | ||
+ | si start est identique à end : | ||
+ | renvoie chaine | ||
+ | fin si | ||
+ | pour chaque sommet u adjacent au sommet start : | ||
+ | si u n' | ||
+ | nchemin = TROUVE-CHAINE(G, | ||
+ | si nchemin non vide : | ||
+ | renvoie nchemin | ||
+ | fin si | ||
+ | fin si | ||
+ | fin pour | ||
+ | renvoie NIL | ||
+ | FIN | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||