Outils pour utilisateurs

Outils du site


les_fiches_revisions:algorithmique:algo_graphes

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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
 </code> </code>
 +
 +Voyez ce programme comme une tache d'encre qui s'étend. \\
 +Le programme va d'abord visiter les taches adjacentes au point de départ pour visiter ceux de plus en plus loin.\\
 +\\
 +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 {{:les_fiches_revisions:algorithmique:image_wiki_nsi.png?400|}}
 +
 +
 +==== 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.\\
 +\\ 
 +<code>
 +VARIABLE
 +G : un graphe
 +u : noeud
 +v : noeud
 +//On part du principe que pour tout sommet u du graphe G, u.couleur = blanc à l'origine
 +DEBUT
 +PARCOURS-PROFONDEUR(G,u) :
 +  u.couleur ← noir
 +  pour chaque sommet v adjacent au sommet u :
 +    si v.couleur n'est pas noir :
 +      PARCOURS-PROFONDEUR(G,v)
 +    fin si
 +  fin pour
 +FIN
 +</code>
 +Sur ce graphe on peut voir le chemin pris par l'algorithme. 
 +{{:les_fiches_revisions:algorithmique:algo_graphe.png?400|}}
 +\\
 +\\
 +====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'effectuer un parcours qui revient à son point de départ sans être obligé de faire demi-tour.\\
 +L'algorithme ci dessous permet de "détecter" la présence d'au moins un cycle dans un graphe.
 +<code>
 +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'origine
 +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
 +</code>
 +
 +====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
 +
 +<code>
 +VARIABLE
 +G : un graphe
 +start : noeud (noeud de départ)
 +end : noeud (noeud d'arrivé)
 +u : noeud
 +chaine : ensemble de noeuds (initialement vide)
 +
 +DEBUT
 +TROUVE-CHAINE(G, start, end, chaine):
 +  chaine = chaine ⋃ start //le symbol ⋃ signifie union, il permet d'ajouter le noeud start à l'ensemble chaine
 +  si start est identique à end :
 +    renvoie chaine
 +  fin si
 +  pour chaque sommet u adjacent au sommet start :
 +    si u n'appartient pas à chaine :
 +      nchemin = TROUVE-CHAINE(G, u, end, chaine)
 +      si nchemin non vide :
 +        renvoie nchemin
 +      fin si
 +    fin si
 + fin pour
 + renvoie NIL
 +FIN
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
  
  
les_fiches_revisions/algorithmique/algo_graphes.txt · Dernière modification: 2021/01/14 11:03 de lf