Este proyecto implementa el Algoritmo de Dijkstra para encontrar la ruta más corta entre dos nodos en un grafo ponderado y bidireccional.
El programa calcula la ruta de menor costo entre dos nodos en una red de 16 nodos interconectados. Utiliza una cola de prioridad (min-heap) para explorar eficientemente los caminos y encuentra la ruta óptima.
dijkstra-algorithm/
├── src/
│ ├── Main.java # Clase principal con el grafo y ejecución
│ ├── Dijkstra.java # Implementación del algoritmo de Dijkstra
│ └── Graph.java # Clase que representa el grafo
└── README.md # Este archivo
Antes de ejecutar el proyecto, asegúrate de tener instalado:
- JDK (Java Development Kit) versión 8 o superior
- Descarga desde: Oracle JDK o OpenJDK
Abre una terminal/consola y ejecuta:
java -versionDeberías ver algo similar a:
java version "17.0.1" 2021-10-19 LTS
Si también necesitas compilar, verifica:
javac -version-
Abre PowerShell o CMD
-
Navega a la carpeta
src:cd "ruta\completa\al\proyecto\dijkstra-algorithm\src"Ejemplo:
cd "C:\Users\TuUsuario\Desktop\dijkstra-algorithm\src" -
Compila todos los archivos Java:
javac *.javaEsto generará archivos
.classen la misma carpeta. -
Ejecuta el programa:
java Main
-
Abre la Terminal
-
Navega a la carpeta
src:cd /ruta/completa/al/proyecto/dijkstra-algorithm/src -
Compila todos los archivos Java:
javac *.java -
Ejecuta el programa:
java Main
- Abre IntelliJ IDEA
- File → Open → Selecciona la carpeta
dijkstra-algorithm - Haz clic derecho en
Main.java→ Run 'Main.main()'
- Abre Eclipse
- File → Open Projects from File System → Selecciona la carpeta
dijkstra-algorithm - Haz clic derecho en
Main.java→ Run As → Java Application
- Abre VS Code
- Instala la extensión "Extension Pack for Java"
- Abre la carpeta
dijkstra-algorithm - Haz clic derecho en
Main.java→ Run Java
Al ejecutar el programa, deberías ver:
## Resultado: Ruta mas corta del Nodo 1 al 16
--------------------------------------------------
Ruta: 1 -> 3 -> 7 -> 11 -> 14 -> 16
Costo Minimo Total: 74
El grafo actual tiene 16 nodos con las siguientes conexiones (bidireccionales):
| Nodo | Conexiones (Nodo: Peso) |
|---|---|
| 1 | 2:20, 3:15, 4:18 |
| 2 | 1:20, 5:10, 6:10 |
| 3 | 1:15, 7:11 |
| 4 | 1:18, 8:12 |
| 5 | 2:10, 6:8, 9:16 |
| 6 | 2:10, 5:8, 7:12, 9:12 |
| 7 | 3:11, 6:12, 8:22, 10:18, 11:18 |
| 8 | 4:12, 7:22, 12:20 |
| 9 | 5:16, 6:12, 13:16 |
| 10 | 7:18, 13:17 |
| 11 | 7:18, 12:15, 14:16 |
| 12 | 8:20, 11:15, 15:15 |
| 13 | 9:16, 10:17, 14:10, 16:18 |
| 14 | 11:16, 13:10, 16:14 |
| 15 | 12:15, 16:25 |
| 16 | 13:18, 14:14, 15:25 |
Para cambiar los nodos de inicio/destino, edita estas líneas en Main.java:
int nodoInicio = 1; // Cambia el nodo de inicio
int nodoDestino = 16; // Cambia el nodo de destinoPara agregar/modificar conexiones, edita las líneas addEdge() en Main.java:
grafoRed.addEdge(nodoOrigen, nodoDestino, peso);// Crear un nuevo grafo simple
Graph miGrafo = new Graph();
// Agregar conexiones
miGrafo.addEdge(1, 2, 5);
miGrafo.addEdge(2, 3, 10);
miGrafo.addEdge(1, 3, 20);
// Calcular ruta más corta
Dijkstra.Result resultado = Dijkstra.findShortestPath(miGrafo, 1, 3);
// Mostrar resultado
if (resultado.hasPath()) {
System.out.println("Ruta: " + resultado.getPath());
System.out.println("Costo: " + resultado.getMinCost());
}- Solución: Java no está instalado o no está en el PATH del sistema.
- Instala JDK
- Agrega Java al PATH del sistema
- Solución: Asegúrate de estar en la carpeta
srccuando ejecutasjava Main
- Solución: El código ya está optimizado para Windows-1252. Si tienes problemas, compila con:
javac -encoding UTF-8 *.java
El programa usa el Algoritmo de Dijkstra que:
- Inicializa todas las distancias como infinito excepto el nodo inicial (0)
- Usa una cola de prioridad para explorar el nodo con menor distancia
- Actualiza las distancias a los vecinos si se encuentra un camino más corto
- Reconstruye la ruta usando un mapa de predecesores
Complejidad Temporal: O((V + E) log V)
- V = número de vértices
- E = número de aristas
Proyecto creado como implementación educativa del Algoritmo de Dijkstra.
Este proyecto es de código abierto y está disponible para uso educativo.