Un graphique mixte est un graphique qui peut avoir à la fois des bords orientés et non orientés. Son graphe non orienté sous-jacent est obtenu en oubliant les orientations des arêtes dirigées, et dans l'autre sens, une orientation d'un graphe mixte est obtenue en affectant une direction à chaque arête non orientée. Un ensemble d'arêtes forme un cycle dans un graphique mixte s'il peut être orienté pour former un cycle dirigé. Un graphique mixte est acyclique si et seulement s'il n'a pas de cycles.
Tout cela est standard et de nombreux articles publiés mentionnent des graphiques mixtes acycliques. Il faut donc connaître l'algorithme suivant pour tester l'acyclicité des graphes mixtes:
Répétez les étapes suivantes:
- Supprimez tout sommet sans arêtes dirigées entrantes et sans arêtes non dirigées incidentes, car il ne peut faire partie d'aucun cycle.
- Si un sommet n'a pas d'arêtes dirigées entrantes mais qu'il a exactement une arête non orientée incidente, tout cycle utilisant l'arête non dirigée doit arriver sur cette arête. Remplacez le bord non dirigé par un bord dirigé entrant.
Arrêtez lorsque plus aucune étape ne peut être effectuée. Si le résultat est un graphe vide, alors le graphe d'origine doit nécessairement avoir été acyclique. Sinon, à partir de n'importe quel sommet restant, on peut revenir en arrière dans le graphique, à chaque étape suivant en arrière à travers un bord entrant ou en suivant un bord non orienté qui n'est pas celui utilisé pour atteindre le sommet actuel, jusqu'à voir un sommet répété. La séquence d'arêtes suivie entre la première et la deuxième répétition de ce sommet (dans l'ordre inverse) forme un cycle dans le graphique mixte.
L'article de Wikipedia sur les graphiques mixtes mentionne les graphiques mixtes acycliques mais ne mentionne pas comment les tester, donc je voudrais y ajouter quelque chose à propos de cet algorithme, mais pour cela j'ai besoin d'une référence publiée. Quelqu'un peut-il me dire où il (ou tout autre algorithme pour tester l'acyclicité) apparaît dans la littérature?