Nähe matrix in java oder c++ zu finden angeschlossenen Knoten
Ich bin da ein problem, wo ich N Knoten im Graphen, die miteinander verbunden sind, um einander dann gegeben eine matrix, die Listen unten ein Knoten mit einem anderen (1, wenn es ist, 0, wenn nicht). Ich Frage mich, wie man am besten Ansatz dieses problem. Ich denke, dass diese Nachbarschaft-matrix? Aber wie würde ich das umsetzen, dass ...
Im Grunde, was ich versuche, um aus dieser herauszufinden, ob ein bestimmter Knoten verbunden ist, zu allen anderen Knoten in einem gegebenen Satz 'S'. Und ob die ausgewählten Objekte sind die clique oder nicht...
Wäre ich dankbar für Hinweise.
InformationsquelleAutor Omnipresent | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie diese umsetzen mit einem 2-dimensionales array von booleans. Also, wenn Knoten i an Knoten j, dann myarray[i][j] wahr wären. Wenn Ihr die Kanten nicht gerichtet", dann myarray[j][i] ist true, wenn myarray[i][j] ist.
Diese können auch erweitert werden, um gewichtete Kanten durch Verwendung von integers (oder einen anderen numerischen Typ) statt Boolesche Werte als Elemente des Arrays.
InformationsquelleAutor lemnisca
Der einfachste Weg, dies zu tun wäre, um eine quadratische matrix (2d-array), Boolesche Werte zeigen die Anwesenheit oder Abwesenheit einer Verbindung oder ganze zahlen darstellen, die Kosten des traversal. Für eine spärliche Grafik, jedoch kann man bessere Kompression durch die Verwendung von jagged arrays und dann speichern, welche Knoten benachbart zu der ersten. In Java würde ich wahrscheinlich tun dies durch eine
List<List<Integer>>
wo die äußere Liste entspricht den Knoten in Frage, und der inneren Liste werden alle Knoten benachbart zu dieser.Vorausgesetzt, Sie entscheiden, zu verwenden eine standard - (unkomprimiert) matrix, die Sie herausfinden könnten, ob ein Knoten i benachbart zu jedem Knoten j in einer Liste zu iterieren Sie durch die Liste, und klicken Sie dann auf der Suche nach Einem[i][j]. Wenn einer von Ihnen sind
false
ist, dann ist es nicht neben jedem Element in der Liste, ansonsten ist es wahr. Für eine clique, Sie müssen nur tun Sie dies für jedes Element in der Liste (hat er den Fall, wo i=j und einige Optimierungen für eine ungerichtete graph).Ein Beispiel (wieder in Java)
Optimierungen und eine Lösung für das Max-Clique-problem sind Links als übung für den Leser.
InformationsquelleAutor James
Versuchen Sie dies:
InformationsquelleAutor
Tipp: So haben Sie Ihre Nachbarschaft-matrix
M
die Ihnen sagt, wenn zwei Knoten sind direkt miteinander verbunden. Dann was bedeutet M^2 bietet Ihnen? Es sagt Ihnen, wenn es ist ein Weg der Länge 2 zwischen zwei Knoten.Ich lasse Sie sich vorstellen, was sind M^3,... , M^inf (wenn Sie erreichen die fixpoint)
InformationsquelleAutor Piotr Lesnicki
Verwendung Ihres angrenzens matrix, die Anwendung der Floyd-Warshall-Algorithmus geben Sie alle Ihre Pfade zwischen den Knoten. Dann können Sie prüfen, ob bestimmte Sätze.
InformationsquelleAutor Robin
Möchten Sie vielleicht die Verwendung bitset oder bit_vector statt bool[][].
Wenn Sie nicht ein jagged array, und Ihre verbindungen sind symmetrisch, wrappen mit einem accessor-basierend auf MIN() & MAX() [Makros]. Das speichern der gleichen Daten in beiden Orten ist ein Rezept für Schmerz. Schließlich, array[i][j] != array[j][i].
InformationsquelleAutor Mr.Ree