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 usoint[][] 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 datosint[] distancia = new int[n];
boolean[] visitado = new boolean[n];
Arrays.fill(distancia, Integer.MAX_VALUE);
distancia[inicio] = 0;
// Iteración sobre todos los nodosfor (int i = 0; i < n - 1; i++) {
int nodoActual = obtenerNodoMenorDistancia(distancia, visitado);
// Marcar el nodo como visitadovisitado[nodoActual] = true;
// Actualizar las distancias de los nodos adyacentesfor (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 inicioSystem.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;
}}
