Algoritmia - RE:No se hacer algoritmos!!!

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación básica de Dijkstra en Java para grafo ponderado

Publicado por Alejandro (307 intervenciones) el 04/03/2024 21:40:39
¡Entendido, Diego! Aquí tienes un ejemplo simple de implementación del algoritmo de Dijkstra en Java, con explicaciones básicas para un curso no muy avanzado. Este algoritmo encuentra la ruta más corta desde un nodo de inicio hasta todos los demás nodos en un grafo ponderado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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;
    }
}

Este código realiza el algoritmo de Dijkstra en un grafo representado por una matriz de adyacencia. La función `dijkstra` calcula las distancias más cortas desde un nodo de inicio hasta todos los demás nodos. Recuerda que este es un ejemplo básico y puede necesitar adaptaciones según tus necesidades específicas y el formato de entrada de tu grafo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar