Professional Documents
Culture Documents
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.
4.
5.
6.
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
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
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.
2.