Ein gemischtes Diagramm ist ein Diagramm, das sowohl gerichtete als auch ungerichtete Kanten haben kann. Das zugrunde liegende ungerichtete Diagramm wird erhalten, indem die Ausrichtungen der gerichteten Kanten vergessen werden, und in der anderen Richtung wird eine Ausrichtung eines gemischten Diagramms erhalten, indem jeder ungerichteten Kante eine Richtung zugewiesen wird. Ein Satz von Kanten bildet einen Zyklus in einem gemischten Diagramm, wenn er so ausgerichtet werden kann, dass er einen gerichteten Zyklus bildet. Ein gemischter Graph ist genau dann azyklisch, wenn er keine Zyklen hat.
Dies ist alles Standard und es gibt viele veröffentlichte Artikel, die azyklische gemischte Grafiken erwähnen. Daher muss der folgende Algorithmus zum Testen der Azyklizität gemischter Graphen bekannt sein:
Wiederholen Sie die folgenden Schritte:
- Entfernen Sie alle Scheitelpunkte, die keine ankommenden gerichteten Kanten und keine ungerichteten Kanten aufweisen, da sie nicht Teil eines Zyklus sein können.
- Wenn ein Scheitelpunkt keine ankommenden gerichteten Kanten, aber genau eine ankommende ungerichtete Kante hat, muss jeder Zyklus, der die ungerichtete Kante verwendet, an dieser Kante eintreten. Ersetzen Sie die ungerichtete Kante durch eine ankommende gerichtete Kante.
Stoppen Sie, wenn keine weiteren Schritte ausgeführt werden können. Wenn das Ergebnis ein leerer Graph ist, muss der ursprüngliche Graph notwendigerweise azyklisch gewesen sein. Andernfalls kann man ausgehend von einem verbleibenden Scheitelpunkt bei jedem Schritt, der rückwärts durch eine ankommende Kante oder einer ungerichteten Kante folgt, die nicht zum Erreichen des aktuellen Scheitelpunkts verwendet wird, durch den Graphen zurückverfolgen, bis ein wiederholter Scheitelpunkt angezeigt wird. Die zwischen der ersten und der zweiten Wiederholung dieses Scheitelpunkts (in umgekehrter Reihenfolge) verfolgte Folge von Kanten bildet einen Zyklus im gemischten Graphen.
Der Wikipedia-Artikel über gemischte Graphen erwähnt azyklische gemischte Graphen, erwähnt jedoch nicht, wie sie getestet werden sollen. Deshalb möchte ich etwas zu diesem Algorithmus hinzufügen, aber dafür benötige ich eine veröffentlichte Referenz. Kann mir jemand sagen, wo es (oder ein anderer Algorithmus zum Testen der Azyklizität) in der Literatur vorkommt?