Ich habe eine adjaceny Matrix für eine Kurve, die die Ränder zwischen den Knoten Spuren durch ein 1 in der entsprechenden adjMat mit [i, j] = 1; Durch diese adjaceny Matrix möchte ich die geschlossenen Bahnen aller Länge, um herauszufinden, 4, die in der Grafik vorhanden ist. Kann mich mit einem Pseudo-Code liefert jemand bitte. Danke
Pseudo-Code für geschlossene Pfade in einem Graphen zu finden,
quelle vom benutzer N3tsecure
In anderen Sprachen...
Tragen Sie eine Tiefe begrenzte depth-first-Suche auf jedem Knoten und Aufzeichnung Knoten , an denen die DFS den Startknoten findet. Für die Suche finden Sie Pseudocode hier: http://en.wikipedia.org/wiki/Depth-limited_search . Sie müssen nur etwas hinzufügen wie
if(node' == node && node'.depth==4) memorize(node)
zum Anfang der Schleife.
Das klingt wie Hausaufgaben, also werde ich das Ganze nicht verraten. Aber hier ist ein Hinweis: Da Sie bei der Suche nach Zyklen der Länge 4 interessiert sind, nehmen Sie die 4. Potenz der Adjazenzmatrix und Scannen entlang der Diagonalen. Wenn irgendein Eintrag M [i, i] ungleich Null ist, gibt es einen Zyklus enthält Knoten i.
Vielleicht ist es nicht der optimale Weg , es zu berechnen , (es ist O(n^4)), aber eine sehr einfache Art und Weise wird durch der alle Ecken scannen
a, b, c, d such that b > a, c > b, d > c
Sie können dann für jede der folgenden Zyklen überprüfen überprüfen:
1. ([a, b] && [b, c] && [c, d] && [d, a]) 2. ([a, b] && [b, d] && [d, c] && [c, a]) 3. ([a, d] && [d, b] && [b, c] && [c, a]) 1: 2: 3: A --- B --- A BAB | | \ / | \ / | | | X | X | | | / \ | / \ | D --- --- C D CCD
Sie sind im Grunde jede geordnete Menge von Eckpunkten (a, b, c, d) für die 3 Möglichkeiten überprüft, dass sie einen Zyklus bilden könnten.
So ist der Pseudo-Code wäre:
for a = 0 to <lastVertex>
for b = a + 1 to <lastVertex>
for c = b + 1 to <lastVertex>
for d = c + 1 to <lastVertex>
if(IsCycle(a,b,c,d)) AddToList([a,b,c,d])
if(IsCycle(a,b,d,c)) AddToList([a,b,d,c])
if(IsCycle(a,c,b,d)) AddToList([a,c,b,d])
next d
next c
next b
next a