You are on page 1of 7

Algoritmo de Dijkstra

Tambin llamado algoritmo de caminos mnimos, es un algoritmo para la


determinacin del camino ms corto dado un vrtice origen al resto de vrtices en
ungrafo con pesos en cada arista. Su nombre se refiere a Edsger Dijkstra, quien lo
describi por primera vez en 1959.
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos ms
cortos que parten del vrtice origen y que llevan a todos los dems vrtices; cuando se
obtiene el camino ms corto desde el vrtice origen, al resto de vrtices que
componen el grafo, el algoritmo se detiene. El algoritmo es una especializacin de la
bsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo
negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la
bsqueda nodos que en prximas iteraciones bajaran el costo general del camino al
pasar por una arista con costo negativo).

Este algoritmo obtiene los caminos de longitud mnima desde un vrtice s a los
restantes vrtices del grafo G. La idea bsica es realizar una exploracin en anchura
"pesada" empezando en el vrtice s. El algoritmo es de tipo "voraz", aumentando
iterativamente una nube de vrtices a partir de s, entrando los nuevos vrtices en la
nube en orden de su distancia al vrtice s. En cada iteracin se elige el vrtice, exterior
a la nube, que es el mas cercano a s. El algoritmo termina cuando no quedan vrtices
fuera de la nube; en ese punto tendremos un camino mnimo desde s a cada uno de
los restantes vrtices del grafo.

Algoritmo
Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un
vector D de tamao N guardar al final del algoritmo las distancias desde x al resto de
los nodos.

1.

2.

Inicializar todas las distancias en D con un valor infinito relativo ya que son
desconocidas al principio, exceptuando la de x que se debe colocar en 0 debido a que
la distancia de x a x sera 0.
Sea a = x (tomamos a como nodo actual).

3.

Recorremos todos los nodos adyacentes de a, excepto los nodos marcados,


llamaremos a estos vi.

4.

Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde


x hasta a sumada a la distancia desde a hasta vi; esta se sustituye con la segunda
nombrada, esto es:
si (Di > Da + d(a, vi)) entonces Di = Da + d(a, vi)

5.
6.

Marcamos como completo el nodo a.


Tomamos como prximo nodo actual el de menor valor en D (puede hacerse
almacenando los valores en una cola de prioridad) y volvemos al paso 3 mientras
existan nodos no marcados.
Una vez terminado al algoritmo, D estar completamente lleno.

Pseudo-cdigo
**funcin Dijkstra** (Grafo G, nodo_salida s)
//Usaremos un vector para guardar las distancias del nodo salida al resto
entero distancia[n] //Inicializamos el vector con distancias iniciales
booleano visto[n] //vector de boleanos para controlar los vertices de los que ya
tenemos la distancia mnima
**para cada** w V[G] **hacer**
**Si** (no existe arista entre s y w) **entonces**
distancia[w] = Infinito //puedes marcar la casilla con un -1 por ejemplo
**Si_no**
distancia[w] = peso (s, w)
**fin si**
**fin para**
distancia[s] = 0
visto[s] = cierto
//n es el nmero de vertices que tiene el Grafo
**mientras que** (no_esten_vistos_todos) **hacer**
vertice = coger_el_minimo_del_vector distancia y que no este visto;
visto[vertice] = cierto;
**para cada** w sucesores (G, vertice) **hacer**
**si** distancia[w]>distancia[vertice]+peso (vertice, w) **entonces**
distancia[w] = distancia[vertice]+peso (vertice, w)
**fin si**
**fin para**
**fin mientras**
**fin funcin**

Ejemplo
El siguiente ejemplo se desarrollar con el fin de encontrar el camino ms corto desde
a hasta z:

Leyenda:
Rojo: Aristas y vrtices pertenecientes a la solucin momentnea.
Azul: Aristas y vrtices candidatos.
Paso 1

En este primer paso, podemos apreciar que hay tres candidatos: Los vrtices b, c y d.
En este caso, hacemos el camino desde el vrtice a, hasta el vrtice d, ya que es el
camino ms corto de los tres.
Solucin momentnea:

Camino: AD

Distancia:5

Paso 2

Ahora, vemos que se aade un nuevo candidato, el vrtice e, y el vrtice c, pero esta
vez a travs del d. Pero el camino mnimo surge al aadir el vrtice c.
Solucin momentnea:

Camino: ADC

Distancia:9

Paso 3

En este paso no se aade ningn candidato ms puesto que el ltimo vrtice es el


mismo que en el paso anterior. En este caso el camino mnimo hallado es el siguiente:
Solucin momentnea:

Camino: ADCB

Distancia:11

Paso 4

Como podemos comprobar, se han aadido dos candidatos nuevos, los vrtices f y g,
ambos a travs del vrtice b. El mnimo camino hallado en todo el grafo hasta ahora es
el siguiente:
Solucin momentnea:

Camino: ADCBF

Distancia:15

Paso 5

En este antepenltimo paso, se aaden tres vrtices candidatos, los vrtices g, z y e.


Este ltimo ya estaba pero en esta ocasin aparece a travs del vrtice f. En este caso
el camino mnimo, que cambia un poco con respecto al enterior, es:
Solucin momentnea:

Camino: ADCBF

Distancia:17

Paso 6

En el penltimo paso, vuelve a aparecer otro candidato: el vrtice z, pero esta vez a
travs del vrtice g. De todas formas, el camino mnimo vuelve a cambiar para retomar
el camino que vena siguiendo en los pasos anteriores:
Solucin momentneeea:

Camino: ADCBFE

Distancia:18

Paso 7

Por fin, llegamos al ltimo paso, en el que slo se aade un candidato, el vrtice z a
travs del e. El camino mnimo y final obtenido es:
Solucin Final:

Camino: ADCBFEZ

Distancia:23

Observaciones:

1.

Los pesos de las aristas deben ser no negativos.

2.

El algoritmo de Dijkstra NO proporciona un rbol generador mnimo

You might also like