Codigo De Kruskal

Páginas: 7 (1627 palabras) Publicado: 19 de junio de 2012
CODIGO DE KRUSKAL
package kruskal;
import java.util.ArrayList;
Clase algoritmok:
public class AlgoritmoK extends Thread {
/**Controla el lienzo de dibujo**/
Lienzo graficar;
/**Es el grafo de ingreso**/
Grafo original;
/**El es arbol recubridor minimal**/
Grafo árbol;
/**Es un arco temporal**/
Arco pro;
/**Es la lista de arcos, de formatemporal**/
ArrayList<Arco> L;
/**
* Resuelve para encontrar el arbol recubridor minimal
**/
@Override
public void run() {
try {
while (L.size() != 0) {
pro = L.get(0);
if (HayCiclo(árbol,pro,árbol.getNodo(pro.getTerminal()), pro.getTerminal()) == false) {
AlgoritmoK.sleep (2000);árbol.ingresarEnlace(pro.getInicial(),pro.getTerminal(), pro.getPeso());
graficar.arbol = árbol;
graficar.repaint();
}
L.remove (pro);
}
} catch (InterruptedException ie) {
ie.printStackTrace();
System.out.println("fracaso el hilo");
}System.out.println("termino el hilo exitosamente");
}
/**El constructor recibe el objeto del lienzo**/
AlgoritmoK(Lienzo g) {
graficar = g;
}
/**
* Inicializa el proceso para encontrar el arbol recubridor minimal,
* dado el Grafo de entrada
**/
public void aplicarKruskal(Grafo grafo) {
árbol = new Grafo();
ArrayList<String>nodos = grafo.getNombres();

for (int j = 0; j < nodos.size(); j++) {
árbol.ingresarNodo(nodos.get(j));
}
L = (ArrayList<Arco>) grafo.getAristas().clone();
pro = L.get(0);
árbol.ingresarEnlace(pro.getInicial(), pro.getTerminal(), pro.getPeso());
graficar.arbol = árbol;
graficar.repaint();
L.remove(pro);this.start();
}
/**
* Este metodo recursivo devuelve "true" si el arco analizado
* no genera ciclos, de lo contrario devuelve "false"
**/
public boolean HayCiclo(Grafo g, Arco aVerificar, Nodo terminal, String N) {
ArrayList<Enlace> aux = terminal.getEnlaces();

if (aux.size() == 0) {
return false;
}
if(terminal.isExisteEnlace(aVerificar.getInicial()) != -1) {
return true;
}
for (int i = 0; i < aux.size(); i++) {
Enlace nodo = aux.get(i);
if (nodo.getDestino().equals(N) == false) {
if (HayCiclo(g, aVerificar, g.getNodo(nodo.getDestino()), terminal.getNombre())) {
return true;
}}
}
return false;
}
}
Clase arco:
public class Arco {
private String inicial;
private String terminal;
private float peso;

public Arco(String start, String end, float weight){
inicial = start;
terminal = end;
peso = weight;
}
public float getPeso(){
return peso;
}
public StringgetInicial(){
return inicial;
}
public String getTerminal(){
return terminal;
}
public void setTerminal(String end){
terminal = end;
}
@Override
public String toString(){
return "(" + inicial + ", " + terminal + ", " + peso + ")";
}
/**Utilizado para el ingreso de Enlaces, para evitar
* ingresar dos veces elmismo arista, solo con los
* terminales cambiados.
**/
public String swapNodos(){
String i = inicial;
String t = terminal;
inicial = terminal;
terminal = i;
String retorno = this.toString();
inicial = i;
terminal = t;
return retorno;
}
}
Clase Enlace:
public class Enlace {
private String destino;...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Algoritmo De Kruskal
  • Kruskal
  • Pasos kruskal wallis
  • Algoritmo de prim y kruskal
  • Algoritmo de kruskal en matlab
  • Codigo
  • Codig
  • codigo

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS