Das sogenannte Autoritätsdiagramm bedeutet, dass jede Kante im Diagramm eine entsprechende oder eine Gruppe von Werten hat. Normalerweise ist dieser Wert nur eine Zahl
Zum Beispiel: In einem Transportnetz kann das Gewicht auf der Seite die Entfernung oder die Transportkosten darstellen (offensichtlich sind beide Zahlen). Das Gewicht am Rand kann jedoch auch etwas anderes sein, wie z. B. eine Zeichenfolge oder sogar ein komplexeres Datenpaket, das mehr Daten sammelt
Die Kernidee des Kruskar -Algorithmus lautet: Im gewichteten Verbindungsdiagramm befindet sich die kleinste Kante ständig im Kantensatz. Wenn die Kante die Bedingungen für den Erhalt des minimalen Spannungsbaums erfüllt, wird er konstruiert, bis schließlich ein minimaler Spannungsbaum erhalten wird.
Ausführungsschritte des Kruskar -Algorithmus:
Schritt 1: Sortieren Sie im gewichteten Verbindungsdiagramm die Gewichte der Kanten.
Schritt 2: Stellen Sie fest, ob Sie diese Kante auswählen müssen (zu diesem Zeitpunkt wurden die Kanten in der Abbildung von klein bis groß an Gewicht sortiert). Die Grundlage für ein Urteilsgrund ist, ob die beiden Scheitelpunkte der Kante verbunden sind. Wenn sie verbunden sind, fahren Sie mit dem nächsten fort; Wenn sie nicht verbunden sind, wählen Sie sie an.
Schritt 3: Schleifen Sie den zweiten Schritt, bis alle Scheitelpunkte im Diagramm in derselben angeschlossenen Komponente sind, was bedeutet, dass der minimale Spannungsbaum erhalten wird.
In Bezug auf die Implementierung des Berechtigungsdiagramms finden Sie im folgenden Beispiel:
Graph:
Paket krukal; public class Graph {endgültig int max = 100;/** Vertex -Knoten*/public class vexNode {int adjvex; int data;} vexnode [] vexnodes; int [] theVexs; // Vertex -Set in [] [] redets = newGraph [max] [max]; // Edge -Set/teufer Set/teufer Set/ordnungsset/ordnungsset/ordnungsset/ordnungsset/ordnungsset/ordnungsgefälle/ordnungsgraph/ordnungsgraph/ordnungsgraph [max] [max] [max]; // Edge -Set/ordnungsgeschwindige. A, int [] vexs) {theVexs = vexs; für (int i = 0; i <vexs.length; i ++) {für (int j = 0; j <vexs.Length; j ++) {graphges [i] [j] = a [i] [j];}}}}}/****** is** is* is* is* is* is* is* is* is* is* is* is* is* is* is* is* is is is is itcraph*/public void voiid Graph.theVexs.length; {System.out.printf ("%4d", graph.edges [i] [j]);}} system.out.println ("/n");}}}Algorithmus:
Paket krukal; öffentliche Klasse krukal {public class Edge {int start; int end; int Gewicht;} public void sortedge (edge [] e, int e) {Edge temp; int j; für (int i = 0; i <e; i ++) {temp = e [i]; j = i-1; E [j]; j-;} e [j+1] = temp;}} public kruskal (graph graph) {int i, j, u1, v1, sn1, sn2, k; int [] vset = new int [100]; edge [] e = new edel [100]; k = 0; for (i = 0; (j = 0; j <= i; j ++) {e [k] = new Edge (); if (graph.edges [i] [j]> 0) {e [k] .Start = i; e [k] .end = j; e [k] .weight = Graph.edges [i] [j]; (i = 0; i <graph.theVexs.length; i ++) {vset [i] = i;} k = 1; j = 0; while (k <graph.thevexs.Length) {u1 = e [j] .Start; v1 = e [j] .end; sn1 = vset [u1]; {System.out.printf ("(%d,%d), Gewicht:%d", u1, v1, e [j] .weight); System.out.println ("/n"); k ++; für (i = 0; i <graph.thevexs) {if (vset [i] == Sn2) {vset [i] = sn1;}}} j ++;}}}Testklasse:
Paket kruskal; public class test {public static void main (String [] args) {int [] vexs = {0,1,2,3,4}; int [] [] a = {{0,1,3,4,7}, {1,0,2, -1, -1}, {3,2,0,5,8}, {4, -1,5,0,6}, {7, -1,8,6,0}}; graph = graph () graph (). kruskal = new kruskal (graph);}}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über das Codebeispiel der Java -Sprache, um den Cruzkal -Algorithmus basierend auf ungerichteten autorisierten Grafiken zu implementieren. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht. Der Herausgeber wird sein Bestes geben, um Sie zu antworten.