RE:No se hacer algoritmos!!!
Publicado por diego alexander (2 intervenciones) el 23/11/2004 17:54:36
nesecito el algoritmo de dijkstra corrtiendo en javacon lobasico de un curso no muuy avaqnsado
Valora esta pregunta


0
import java.util.*;
public class Dijkstra {
public static void main(String[] args) {
// Ejemplo de uso
int[][] grafo = {
{0, 2, 4, 0, 0},
{0, 0, 1, 7, 0},
{0, 0, 0, 0, 3},
{0, 0, 0, 0, 1},
{0, 0, 0, 0, 0}
};
int nodoInicio = 0;
dijkstra(grafo, nodoInicio);
}
public static void dijkstra(int[][] grafo, int inicio) {
int n = grafo.length;
// Inicialización de las estructuras de datos
int[] distancia = new int[n];
boolean[] visitado = new boolean[n];
Arrays.fill(distancia, Integer.MAX_VALUE);
distancia[inicio] = 0;
// Iteración sobre todos los nodos
for (int i = 0; i < n - 1; i++) {
int nodoActual = obtenerNodoMenorDistancia(distancia, visitado);
// Marcar el nodo como visitado
visitado[nodoActual] = true;
// Actualizar las distancias de los nodos adyacentes
for (int j = 0; j < n; j++) {
if (!visitado[j] && grafo[nodoActual][j] != 0 &&
distancia[nodoActual] != Integer.MAX_VALUE &&
distancia[nodoActual] + grafo[nodoActual][j] < distancia[j]) {
distancia[j] = distancia[nodoActual] + grafo[nodoActual][j];
}
}
}
// Mostrar las distancias más cortas desde el nodo de inicio
System.out.println("Distancias más cortas desde el nodo " + inicio + ":");
for (int i = 0; i < n; i++) {
System.out.println("Nodo " + i + ": " + distancia[i]);
}
}
public static int obtenerNodoMenorDistancia(int[] distancia, boolean[] visitado) {
int minDistancia = Integer.MAX_VALUE;
int minNodo = -1;
for (int i = 0; i < distancia.length; i++) {
if (!visitado[i] && distancia[i] <= minDistancia) {
minDistancia = distancia[i];
minNodo = i;
}
}
return minNodo;
}
}