Le soi-disant graphique d'autorité signifie que chaque bord du graphique aura un ou un groupe de valeurs correspondant. Normalement, cette valeur n'est qu'un nombre
Par exemple: dans un réseau de transport, le poids sur le côté peut représenter la distance ou le coût du transport (évidemment les deux sont des nombres). Cependant, le poids sur le bord peut également être autre chose, comme une chaîne ou même un paquet de données plus complexe, qui collecte plus de données
L'idée principale de l'algorithme de Kruskar est: dans le graphique de connexion pondéré, le plus petit bord se trouve constamment dans l'ensemble de bords. Si le bord remplit les conditions pour obtenir l'arbre couvrant minimum, il est construit jusqu'à ce qu'un arbre couvrant minimum soit finalement obtenu.
Étapes d'exécution de l'algorithme de Kruskar:
Étape 1: Dans le graphique de connexion pondéré, triez les poids des bords;
Étape 2: Déterminez si vous devez sélectionner ce bord (pour le moment, les bords de la figure ont été triés de petit à grand en poids). La base du jugement est de savoir si les deux sommets du bord sont connectés. S'ils sont connectés, continuez à la suivante; S'ils ne sont pas connectés, choisissez de les connecter.
Étape 3: Boucle la deuxième étape jusqu'à ce que tous les sommets du graphique soient dans le même composant connecté, ce qui signifie que l'arbre couvrant minimum est obtenu.
Concernant la mise en œuvre du graphique d'autorisation, voir l'exemple suivant:
Graphique:
package kruskal; graphique de classe publique {final int max = 100; / * * nœud vertex * / classe publique Vexnode {int adjvex; int;} Vexnode [] vexnodes; int [] thevex; // vertex set int [] [] edges = new int [max] [max]; // set / * * * créer graphique * / public Void Creategh A, int [] vexs) {thevexs = vexs; for (int i = 0; i <vexs.length; i ++) {for (int j = 0; j <vexs.length; j ++) {graph.eds [i] [j] = a [i] [j];}}}} / * * sort graph * / public void printgraph (graphy) {for (i = 0; graph.thevexs.length; i ++) {for (int j = 0; j <graph.thevexs.length; j ++) {// s'il n'y a pas de chemin, output / if (graph.edges [i] [j] == - 1) {System.out.printf ("% 4s", ");} else {System.out.printf ("% 4D", graph.edges [i] [j]);}} System.out.println ("/ n");}}}algorithme:
package kruskal; public class Kruskal {public class edge {int start; int end; int Weight;} public void triEdge (edge [] e, int e) {edge temp; int j; for (int i = 0; i <e; i ++) {temp = e [i]; j = i-1; while (j> = 0 && temp. E [j]; j -;} e [j + 1] = temp;}} public kruskal (graphique graphique) {int i, j, u1, v1, sn1, sn2, k; int [] vset = new int [100]; edge [] e = new edge [100]; k = 0; for (i = 0; i <graph.thevexs.Leleng {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]; k ++;}}} triEdge (e, k); pour (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]; sn2 = vset [v1]; if (sn1! = sn2) {System.out.printf (((% d,% d), poids: poids: % d ", u1, v1, e [j]. pondér); system.out.println (" / n "); k ++; for (i = 0; i <graph.thevexs.length; i ++) {if (vset [i] == sn2) {vset [i] = sn1;}}} j ++;}}}Classe de test:
package 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}. kruskal = new Kruskal (graphique);}}Résumer
Ce qui précède est l'intégralité du contenu de cet article sur l'exemple de code de la langue Java pour implémenter l'algorithme Cruzkal basé sur des graphiques autorisés non dirigés. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez laisser un message à tout moment. L'éditeur fera de son mieux pour vous répondre.