2016-04-01 2 views
1

I eine Datenstruktur hat, die eine kreisförmige Referenz in einer Liste von Knoten zu finden, und die Kanten

[ID: 1, Name: "Node 1"], 
[ID: 2, Name: "Node 2"], 
[ID: 3, Name: "Node 3"], 
[ID: 4, Name: "Node 4"] 

und Kanten in der Form einer Liste von Knoten

ist, von der Form

[StartNode: 1, EndNode: 2], 
[StartNode: 2, EndNode: 3] 

und bald.

Diese Daten werden in SQL gespeichert und mit C# und Angular verarbeitet. Knoten können mehrfach verbunden sein, aber die eine Sache, die die Schnittstelle unterbricht, ist eine zirkuläre Referenz. I kann nicht haben Knoten 1 -> Knoten 2 -> Knoten 3 -> Knoten 1.

Irgendwie hat sich ein Zirkelbezug in unsere Datenbank eingeschlichen, aber ich kann nicht herausfinden, wo es ist. Es ist wahrscheinlich ein "kleiner" Kreis von drei Knoten, die miteinander verbunden sind, wenn sie es nicht sollten, aber ich kann mir nicht sicher sein.

Wie kann ich eine Art rekursiven Algorithmus schreiben, um herauszufinden, wo der Zirkelbezug ist? Kann ich dies über eine Reihe von Joins in SQL tun?

+1

Werfen Sie einen Blick auf diese [SO Frage] (http://stackoverflow.com/questions/261573/best-algorithm-for-detecing-cycles-in-a-irected-graph) –

+0

@GordonAllocman Die "in SQL "Bit ist wichtig. SQL ist nicht als allgemeine Sprache konzipiert, und manchmal kann es schwierig sein, herauszufinden, wie ein bestimmter Algorithmus in SQL implementiert wird. – btilly

+0

@btilly Ich habe nicht versucht, es als ein Duplikat oder irgendetwas zu markieren, ihm nur einen möglichen Hinweis zu geben, wie du erwähnt hast, ist ein Weg, es in deiner Antwort zu tun –

Antwort

Verwandte Themen