Anda di halaman 1dari 2

EJERCICIO DE GRAFOS

CLASE PRINCIPAL

package ejemplo_grafo;

public class Ejemplo_Grafo {

public static void main(String[] args) {

long matriz[][]={{0,3,4,999999999,8,999999999},
{999999999,0,999999999,999999999,5,999999999},
{999999999,999999999,0,999999999,3,999999999},
{999999999,999999999,999999999,0,999999999,999999999},
{999999999,999999999,999999999,7,0,3},
{999999999,999999999,999999999,2,999999999,0}};
Grafo ruta_camino = new Grafo();
System.out.println(ruta_camino.algoritmo(matriz));
}

SUB CLASE

package ejemplo_grafo;

public class Grafo {


//Metodos para determinar todos los caminos Floyd
public String algoritmo(long matriz [][]){
int vertice = matriz.length;
long matrizAdyacente[][] = matriz;
String caminos [][] = new String[vertice][vertice];
String caminosAuxiliares[][] = new String[vertice][vertice];
String caminoRecorrido = "",cadena = "",caminitos = "";
int i,j,k;
float temporal1,temporal2,temporal3,temporal4,minimo;

//Inicializando las matrices caminos y caminosauxiliares


for ( i = 0; i <vertice; i++) {
for (j = 0; j <vertice; j++) {
caminos[i][j] = "";
caminosAuxiliares[i][j] = "";
}
}
for ( k = 0; k <vertice; k++) {
for (i = 0; i <vertice; i++) {
for ( j = 0; j <vertice; j++) {
temporal1 = matrizAdyacente[i][j];
temporal2 = matrizAdyacente[i][k];
temporal3 = matrizAdyacente[k][j];
temporal4 = temporal2 + temporal3;
//Encontrando el minimo
minimo = Math.min(temporal1, temporal4);
if(temporal1 != temporal4){
if(minimo == temporal4){
caminoRecorrido = "";
caminosAuxiliares[i][j]= k + "";
caminos[i][j] = caminosR(i,k,caminosAuxiliares,caminoRecorrido)+(k+1);
}
}
matrizAdyacente[i][j] = (long)minimo;
}
}

}
//Agregando el camino minomo a cadena;
for ( i = 0; i <vertice; i++) {
for (j = 0; j <vertice; j++) {
cadena = cadena + "["+matrizAdyacente[i][j]+"]";
}
cadena = cadena +"\n";
}
for ( i = 0; i <vertice; i++) {
for (j = 0; j <vertice; j++) {
if(matrizAdyacente[i][j] != 1000000000){
if( i != j){
if(caminos[i][j].equals("")){
caminitos += "De ("+(i+1)+"--->"+(j+1)+" Irse por...("+(i+1)+",
"+(j+1)+")\n";
}else{
caminitos += "De ("+(i+1)+"--->"+(j+1)+" Irse por...("+(i+1)+",
"+caminos[i][j]+",
"+(j+i)+")\n";
}
}
}
}

}
return "La matriz mas cortos entre los diferente vertices es:\n"+cadena+
"\nlos diferentes caminos mas cortos entre vertices son:\n"+caminitos;
}

private String caminosR(int i, int k, String[][] caminosAuxiliares, String caminoRecorrido) {


if(caminosAuxiliares[i][k].equals("")){
return "";
} else{
caminoRecorrido += caminosR(i, Integer.parseInt(caminosAuxiliares[i][k].toString()),
caminosAuxiliares,
caminoRecorrido)+(Integer.parseInt(caminosAuxiliares[i][k].toString()+1))+", ";
return caminoRecorrido;
}
}
}

Anda mungkin juga menyukai