Cycles - compléments
On peut trouver d'autres algorithmes pour la détection de cycles.
Info
Nous nous plaçons dans le cas de graphes connexes1 non orientés.
I. Utiliser les distances⚓︎
Les distances
On parcourt le graphe en largeur, à partir d'un sommet depart
choisi au hasard. Au fur et à mesure de la progression,
on construit le dictionnaire distances
qui prend comme clés les sommets visités, et comme valeur associée à chaque clé la distance
à laquelle il se trouve du sommet de départ (nombre d'arcs), que nous appelons ici distance. Le parcours étant un parcours en largeur,
les distances des sommets parcourus restent les mêmes, ou augmentent. Si la distance d'un voisin d'un sommet, est supérieure ou égale
à la distance du sommet, cela signifie qu'on ne provient pas de ce sommet. On arrête le parcours, et la fonction renvoie True
.
À vous de jouer
Compléter le script ci-dessous
Les graphes utilisés pour les tests sont :
graphe_5 :
graph LR
A --- B
B --- E
A --- C
graphe_6 :
graph LR
A --- B
A --- C
C --- D
C --- E
E --- D
II. Algorithme récursif⚓︎
Recherche de cycle récursive
Tester ci-dessous
Les graphes utilisés pour les tests sont :
graphe_5 :
graph LR
A --- B
B --- E
A --- C
graphe_6 :
graph LR
A --- B
A --- C
C --- D
C --- E
E --- D
# Tests
(insensible à la casse)(Ctrl+I)
(Ctrl+Clic pour inverser les colonnes)
Nous pouvons observer le déroulement dans Python Tutor pour ces deux graphes :
III. Site créé par Frédéric ZINELLI⚓︎
Crédits⚓︎
Serge Bays, Romain Janvier
-
Voir : Les graphes - Structure au paragraphe 1.2.4 : Structures de graphes ↩
# Tests
(insensible à la casse)(Ctrl+I)
(Ctrl+Clic pour inverser les colonnes)