Ci-dessous, les différences entre deux révisions de la page.
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 10:52] lf created |
les_fiches_revisions:algorithmique:algo_graphes [2021/01/14 10:36] lf |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | en cours par fl | + | ======Algorithmes sur les graphes===== |
+ | |||
+ | Il existe 2 méthodes pour parcourir un graphe : \\ | ||
+ | •Le parcours | ||
+ | •le parcours en profondeur | ||
+ | •Chercher une chaine dans un graphe | ||
+ | |||
+ | ===A quoi ça sert ?=== | ||
+ | |||
+ | Les parcours d' | ||
+ | |||
+ | ==== Le parcours en largeur ==== | ||
+ | |||
+ | < | ||
+ | VARIABLE | ||
+ | G : un graphe | ||
+ | s : noeud (origine) | ||
+ | u : noeud | ||
+ | v : noeud | ||
+ | f : file (initialement vide) | ||
+ | |||
+ | //On part du principe que pour tout sommet u du graphe G, u.couleur = blanc à l' | ||
+ | DEBUT | ||
+ | s.couleur ← noir | ||
+ | enfiler (s,f) | ||
+ | tant que f non vide : | ||
+ | u ← defiler(f) | ||
+ | pour chaque sommet v adjacent au sommet u : | ||
+ | si v.couleur n'est pas noir : | ||
+ | v.couleur ← noir | ||
+ | enfiler(v, | ||
+ | fin si | ||
+ | fin pour | ||
+ | fin tant que | ||
+ | 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, | ||
+ | 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, | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ |