C/Visual C - ALGORITMO DE DIJKSTRA

 
Vista:

ALGORITMO DE DIJKSTRA

Publicado por Jonathan (1 intervención) el 11/02/2003 15:22:22
NECESITO AYUDA CON EL ALGORITMO DE DIJKSTRA PARA LENGUAJE C.... A LA VEZ TAMBIEN NECESITO QUE ESTE ALGORITMO ME PERMITA GRAFICAR EL CAMINO MAS CORTO QUE EXISTE ENTRE 2 PUNTOS...
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 del algoritmo de Dijkstra con visualización del camino más corto

Publicado por Alejandro (1153 intervenciones) el 05/05/2025 16:55:28
Jonathan, para implementar el algoritmo de Dijkstra en C y graficar el camino más corto entre dos puntos, puedes seguir estos pasos:

1. Implementación del algoritmo de Dijkstra:
- Crea una representación del grafo utilizando una matriz de adyacencia o una lista de adyacencia.
- Implementa el algoritmo de Dijkstra para encontrar el camino más corto desde un nodo fuente a todos los demás nodos. Puedes referirte a la explicación detallada y el código en C++ que se encuentra en el artículo de GeeksforGeeks, que describe los pasos del algoritmo y su complejidad.

2. Estructura de datos:
- Define una estructura para representar los nodos y sus distancias.
- Utiliza un array para almacenar las distancias mínimas desde el nodo fuente a cada nodo.

3. Visualización del camino:
- Para graficar el camino más corto, puedes utilizar una biblioteca gráfica como SDL (Simple DirectMedia Layer) u OpenGL.
- Después de calcular el camino más corto, almacena los nodos que forman parte de este camino en una lista.
- Utiliza la biblioteca gráfica para dibujar el grafo y resaltar el camino más corto.

4. Ejemplo de código:
Aquí tienes un ejemplo básico de cómo podrías estructurar tu código en C:

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
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
 
#define V 9 // Número de vértices en el grafo
 
int minDistance(int dist[], bool sptSet[]) {
    int min = INT_MAX, min_index;
    for (int v = 0; v < V; v++) {
        if (sptSet[v] == false && dist[v] <= min) {
            min = dist[v];
            min_index = v;
        }
    }
    return min_index;
}
 
void dijkstra(int graph[V][V], int src) {
    int dist[V];
    bool sptSet[V];
 
    for (int i = 0; i < V; i++) {
        dist[i] = INT_MAX;
        sptSet[i] = false;
    }
 
    dist[src] = 0;
 
    for (int count = 0; count < V - 1; count++) {
        int u = minDistance(dist, sptSet);
        sptSet[u] = true;
 
        for (int v = 0; v < V; v++) {
            if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX && dist[u] + graph[u][v] < dist[v]) {
                dist[v] = dist[u] + graph[u][v];
            }
        }
    }
 
    // Imprimir el camino más corto
    printf("El camino más corto desde el nodo %d es:\n", src);
    for (int i = 0; i < V; i++) {
        printf("A %d: %d\n", i, dist[i]);
    }
}
 
int main() {
    int graph[V][V] = { {0, 4, 0, 0, 0, 0, 0, 8, 0},
                        {4, 0, 8, 0, 0, 0, 0, 11, 0},
                        {0, 8, 0, 7, 0, 4, 0, 0, 2},
                        {0, 0, 7, 0, 9, 14, 0, 0, 0},
                        {0, 0, 0, 9, 0, 10, 0, 0, 0},
                        {0, 0, 4, 14, 10, 0, 2, 0, 0},
                        {0, 0, 0, 0, 0, 2, 0, 1, 6},
                        {8, 11, 0, 0, 0, 0, 1, 0, 7},
                        {0, 0, 2, 0, 0, 0, 6, 7, 0} };
 
    dijkstra(graph, 0);
    return 0;
}

5. Integración de la visualización:
- Una vez que tengas el algoritmo funcionando, puedes integrar la visualización utilizando la biblioteca gráfica elegida. Asegúrate de resaltar el camino más corto en el grafo visualizado.

Con estos pasos, podrás implementar el algoritmo de Dijkstra en C y graficar el camino más corto entre dos puntos.
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