El llamado cuadro de autoridad significa que cada borde en el gráfico tendrá uno o un grupo de valores correspondiente. Normalmente, este valor es solo un número
Por ejemplo: en una red de transporte, el peso en el lado puede representar la distancia o el costo de transporte (obviamente, ambos son números). Sin embargo, el peso en el borde también puede ser otra cosa, como una cadena o incluso un paquete de datos más complejo, que recopila más datos
La idea central del algoritmo Kruskar es: en el gráfico de conexión ponderado, el borde más pequeño se encuentra constantemente en el conjunto de borde. Si el borde cumple con las condiciones para obtener el árbol de expansión mínimo, se construye hasta que finalmente se obtenga un árbol de expansión mínimo.
Pasos de ejecución del algoritmo Kruskar:
Paso 1: En el gráfico de conexión ponderada, ordene los pesos de los bordes;
Paso 2: Determine si necesita seleccionar este borde (en este momento, los bordes en la figura se han ordenado de peso pequeño a grande). La base para el juicio es si los dos vértices del borde están conectados. Si están conectados, continúe al siguiente; Si no están conectados, elija conectarlos.
Paso 3: Enoje el segundo paso hasta que todos los vértices en el gráfico estén en el mismo componente conectado, lo que significa que se obtiene el árbol de expansión mínimo.
Con respecto a la implementación del gráfico de permiso, vea el siguiente ejemplo:
Gráfico:
paquete kruskal; public class Graph {final int max = 100;/** Vertex node*/public class VexNode {int adjVEx; int data;} vexnode [] vexnodes; int [] theVExs; // vértex set int [] [] edges = new int [max] [max]; // bordes set/** create graph*/public vkooCh, graph, graph, thap. A, int [] vexs) {thevexs = vexs; for (int i = 0; i <vexs.length; i ++) {for (int j = 0; j <vexs.length; j ++) {gráfico.Edges [i] [j] = a [i] [j];}}}/** emerger gráfico*/public void printgraph (gráfico) Graph.TheVexs.length; {System.out.printf ("%4d", Graph.edges [i] [j]);}} System.out.println ("/n");}}}algoritmo:
paquete kruskal; public class Kruskal {public class Edge {int inicio; int end; int weight;} public void sortEdge (borde [] e, int e) {borde temp; int j; for (int i = 0; i <e; i ++) {temp = e [i]; j = i-1; while (j> = 0 && temp.weight <e [j] .Weight) .weight). E [j]; j-;} e [j+1] = temp;}} public kruskal (gráfico gráfico) {int i, j, u1, v1, sn1, sn2, k; int [] vset = new int [100]; borde [] e = nuevo borde [100]; k = 0; para (i = 0; i <apt.theVexs.length; i ++) {para (j = 0; j <= i; j ++) {e [k] = new Edge (); if (gráfico (i = 0; i <gráfico.theVexs.length; i ++) {vset [i] = i;} k = 1; j = 0; while (k <gráfico {System.out.printf ("(%d,%d), peso:%d", u1, v1, e [j] .weight); system.out.println ("/n"); k ++; para (i = 0; i <gráfico.thevexs.length; i ++) {if (vset [i] == sn2) {vset [i] = sn1;}}} j ++;}}}Clase de prueba:
paquete kruskal; prueba de clase pública {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,6,0}}}; gráfico gráfico = nuevo gráfico (); gráfico. kruskal = new Kruskal (gráfico);}}Resumir
Lo anterior es todo el contenido de este artículo sobre el ejemplo de código del lenguaje Java para implementar el algoritmo Cruzkal basado en gráficos autorizados no dirigidos. Espero que sea útil para todos. Si tiene alguna pregunta, deje un mensaje en cualquier momento. El editor hará todo lo posible para responderte.