O chamado gráfico de autoridade significa que cada borda no gráfico terá um ou um grupo de valores correspondente. Normalmente, esse valor é apenas um número
Por exemplo: em uma rede de transporte, o peso do lado pode representar a distância ou o custo de transporte (obviamente ambos são números). No entanto, o peso na borda também pode ser outra coisa, como uma string ou mesmo um pacote de dados mais complexo, que coleta mais dados
A idéia central do algoritmo Kruskar é: No gráfico de conexão ponderado, a menor borda é constantemente encontrada no conjunto de arestas. Se a borda atender às condições para obter a árvore de abrangência mínima, ela será construída até que uma árvore de abrangência mínima seja finalmente obtida.
Etapas de execução do algoritmo Kruskar:
Etapa 1: No gráfico de conexão ponderado, classifique os pesos das bordas;
Etapa 2: determine se você precisa selecionar essa borda (no momento, as bordas da figura foram classificadas de pequeno a grande peso). A base para o julgamento é se os dois vértices da borda estão conectados. Se eles estiverem conectados, continue ao próximo; Se eles não estiverem conectados, escolha conectá -los.
Etapa 3: Loop na segunda etapa até que todos os vértices no gráfico estejam no mesmo componente conectado, o que significa que a árvore de abrangência mínima é obtida.
Em relação à implementação do gráfico de permissão, consulte o exemplo a seguir:
Gráfico:
pacote kruskal; public class Gráfico {final int max = 100;/** nó vertex*/public class VexNode {int adjux; int data;} vexnode [] vexnodes; int [] theAexs; // vertex set int [] [] bordas = novo int [max] [max]; A, int [] VEXS) {theVexs = VEXS; for (int i = 0; i <vexs.length; i ++) {for (int j = 0; j <vexs.lengths; j ++) {para graf.edges [i] [j] = a [i] Graph.Thevexs.length; {System.out.printf ("%4d", Graph.edges [i] [j]);}} System.out.println ("/n");}}}algoritmo:
pacote kruskal; classe pública kruskal {public class Edge {int start; int end; int weight;} public void SortEdge (Edge [] e, int e) {edge temp; int j; para (int i = 0; i <e; i ++) {temp = e [i]; j = i-1; whinne (j> = 0 & tesp.wek). 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]; borda [] e = new [100]; k = 0; para (i = 0; (j = 0; j <= i; j ++) {e [k] = new Edge (); if (graph.edges [i] [j]> 0) {e [k] .start = i; e [k] .nd = j; e [k] .weight = graph.edges [i] (i = 0; i <graf.Thevexs.Length; i ++) {vset [i] = i;} k = 1; j = 0; while (k <graf.thevexs.length) {u1 = e [j] .start; v1 = e [j] .nd; {System.out.printf ("(%d,%d), peso:%d", u1, v1, e [j] .weight); system.out.println ("/n"); k ++; para (i = 0; i <graph.thevexs.length; {vset [i] = sn1;}}} j ++;}}}Classe de teste:
pacote kruskal; public class Test {public static void main (string [] args) {int [] vex = {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 = new (); graph.creatGraff (graph.1,8,0}}; graph = new Graph (); graph.creatGraff (graph.1,8,0}}; graph = new ();); kruskal = novo kruskal (gráfico);}}Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre o exemplo de código do idioma Java para implementar o algoritmo Cruzkal com base em gráficos autorizados não direcionados. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe uma mensagem a qualquer momento. O editor tentará o seu melhor para responder.