Dijkstra's Algorithm
#Función para construir adyacencia
def constructAdj(edges, V):
adj = [[] for _ in range(V)]
for edge in edges:
u, v, wt = edge
adj[u].append([v, wt])
adj[v].append([u, wt])
return adj
def dijkstra(V, edges, src):
adj = constructAdj(edges, V)
pq = [] # Cola de prioridad (min-heap)
dist = [sys.maxsize] * V
heapq.heappush(pq, [0, src])
dist[src] = 0
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
1 2
3
4 5
7
0
6
Source
1
5
2 3 1
9
2 9
4
9
3
Dijkstra's Algorithm
#Función para construir adyacencia
def constructAdj(edges, V):
adj = [[] for _ in range(V)]
for edge in edges:
u, v, wt = edge
adj[u].append([v, wt])
adj[v].append([u, wt])
return adj
def dijkstra(V, edges, src):
adj = constructAdj(edges, V)
pq = [] # Cola de prioridad (min-heap)
dist = [sys.maxsize] * V
heapq.heappush(pq, [0, src])
dist[src] = 0
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
Edsger W. Dijkstra (1930-2002)
1 2
3
4 5
7
0
6
Source
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
adj = [[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],]
edges = [[0, 1, 9], [0, 2, 4], [0, 3, 3], [1, 4, 2], [1, 6, 1],
[2, 5, 1], [2, 7, 9], [3, 4, 2], [3, 5, 9], [4, 6, 5], [5, 7, 3]]
u v wt
#Función para construir adyacencia
def constructAdj(edges, V):
adj = [[] for _ in range(V)]
for edge in edges:
u, v, wt = edge
adj[u].append([v, wt])
adj[v].append([u, wt])
return adj
Input
v = 8
adj = [[1,9],
[0,9],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],]
adj[0]
adj[1]
adj = [[1,9], [2,4],
[0,9],
[0,4],
[ ],
[ ],
[ ],
[ ],
[ ],]
adj = [[1,9], [2,4], [3,3]
[0,9],
[0,4],
[0,3],
[ ],
[ ],
[ ],
[ ],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2]
[0,4],
[0,3],
[1,2],
[ ],
[ ],
[ ],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4],
[0,3],
[1,2],
[ ],
[1,1],
[ ],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4], [5,1]
[0,3],
[1,2],
[2,1],
[1,1],
[ ],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4], [5,1], [7,9]
[0,3],
[1,2],
[2,1],
[1,1],
[2,9],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4], [5,1], [7,9]
[0,3], [4, 2]
[1,2], [3, 2]
[2,1],
[1,1],
[2,9],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4], [5,1], [7,9]
[0,3], [4, 2], [5, 9]
[1,2], [3, 2]
[2,1], [3, 9]
[1,1],
[2,9],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4], [5,1], [7,9]
[0,3], [4, 2], [5, 9]
[1,2], [3, 2], [6, 5]
[2,1], [3, 9]
[1,1], [4, 5]
[2,9],]
adj = [[1,9], [2,4], [3,3]
[0,9], [4,2], [6,1]
[0,4], [5,1], [7,9]
[0,3], [4, 2], [5, 9]
[1,2], [3, 2], [6, 5]
[2,1], [3, 9], [7, 3]
[1,1], [4, 5]
[2,9], [5, 3]]
1 2
3
4 5
7
0
6
∞ Source ∞
∞
∞ ∞
∞
∞
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 ∞ ∞ ∞ ∞ ∞ ∞ ∞
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
def dijkstra(V, edges, src):
adj = constructAdj(edges, V)
pq = []# Cola de prioridad (min-heap)
dist = [sys.maxsize] * V
heapq.heappush(pq, [0, src])
dist[src] = 0
pq = [0, 0]
dist nodo
1 2
3
4 5
7
0
6
Source
∞ ∞
∞
∞
0
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
∞
∞
∞
adj[0] = [1,9], [2,4], [3,3]
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
∞ ∞ ∞ ∞ ∞ ∞ ∞
pq = [0, 0]
1 2
3
4 5
7
0
6
Source
∞ ∞
∞
∞
0
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
pq = [0, 0], [9, 1]
∞
∞
adj[0] = [1,9], [2,4], [3,3]
0 9
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
∞ ∞ ∞ ∞ ∞ ∞
9
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
1 2
3
4 5
7
0
6
Source
∞ ∞
∞
∞
0
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
pq = [0, 0], [9, 1]
∞
adj[0] = [1,9], [2,4], [3,3]
0 9 3
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
∞ ∞ ∞ ∞ ∞
9
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
∞
1 2
3
4 5
7
0
6
Source
∞ ∞
∞
∞
0
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
pq = [0, 0], [4, 2], [9, 1]
adj[0] = [1,9], [2,4], [3,3]
0 9 3
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
∞ ∞ ∞ ∞ ∞
9
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
4
∞
1 2
3
4 5
7
0
6
Source
∞ ∞
∞
∞
0
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
adj[0] = [1,9], [2,4], [3,3]
0 9 3
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
∞ ∞ ∞ ∞ ∞
9
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
4
∞
pq = [0, 0], [4, 2], [9, 1]
1 2
3
4 5
7
0
6
Source
∞ ∞
∞
∞
0
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
pq = [0, 0], [3, 3], [4, 2], [9, 1]
adj[0] = [1,9], [2,4], [3,3]
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
9
3
4
0 9 4 3 ∞ ∞ ∞ ∞
while pq:
u = heapq.heappop(pq)[1]
for x in adj[u]:
v, weight = x[0], x[1]
if dist[v] > dist[u] + weight:
# Actualizar la distancia de v
dist[v] = dist[u] + weight
heapq.heappush(pq, [dist[v], v])
return dist
1 2
3
4 5
7
0
6
9 Source 4
3
∞ ∞
∞
∞
0
0 9 4 3
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{0,0}
{4,2}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{9,1}
{3,3}
1 2
3
4 5
7
0
6
9 Source 4
3
∞ ∞
∞
∞
0
0 9 4 3
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{3,3}
{4,2}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{9,1}
1 2
3
4 5
7
0
6
9 Source 4
3
5 11
∞
∞
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{9,1}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{11,5}
{5,4}
0 9 4 3 5 11
{4,2}
1 2
3
4 5
7
0
6
9 Source 4
3
5 11
∞
∞
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{9,1}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{11,5}
{5,4}
0 9 4 3 5 11
{4,2}
1 2
3
4 5
7
0
6
9 Source 4
3
5 5
13
∞
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{9,1}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{13,7}
{5,5}
0 9 4 3 5 5 13
{5,4}
1 2
3
4 5
7
0
6
9 Source 4
3
5 5
13
∞
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{9,1}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{13,7}
{5,5}
0 9 4 3 5 5 13
{5,4}
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
13
10
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{10,6}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{13,7}
{7,1}
0 7 4 3 5 5 10 13
{5,5}
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
13
10
0
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
push
pop
1
5
2 3
{10,6}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{13,7}
{7,1}
0 7 4 3 5 5 10 13
{5,5}
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
10
0
push
pop
1
5
2 3
{8,7}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{10,6}
{7,1}
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 10 8
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
10
0
push
pop
1
5
2 3
{8,7}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{10,6}
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 10 8
{7,1}
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
8
0
push
pop
1
5
2 3
{8,6}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{8,7}
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 8 8
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
8
0
push
pop
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
{8,7}
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 8 8
{8,6}
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
8
0
push
pop
1
5
2 3
{8,6}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{8,7}
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 8 8
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
8
0
push
pop
1
5
2 3
{8,6}
Dijkstra's Algorithm
1
9
2 9
4
9
3
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 8 8
{8,7}
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
8
0
push
pop
1
5
2 3
Dijkstra's Algorithm
1
9
2 9
4
9
3
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 8 8
1 2
3
4 5
7
0
6
7 Source 4
3
5 5
8
8
0
1
2 3
{8,7}
Dijkstra's Algorithm
1
2
4
3
{5,5
dist[ ] =
vértice = 0 1 2 3 4 5 6 7
0 7 4 3 5 5 8 8
5
9
9
9

Visual explanation of Dijkstra's Algorithm using Python

  • 1.
    Dijkstra's Algorithm #Función paraconstruir adyacencia def constructAdj(edges, V): adj = [[] for _ in range(V)] for edge in edges: u, v, wt = edge adj[u].append([v, wt]) adj[v].append([u, wt]) return adj def dijkstra(V, edges, src): adj = constructAdj(edges, V) pq = [] # Cola de prioridad (min-heap) dist = [sys.maxsize] * V heapq.heappush(pq, [0, src]) dist[src] = 0 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist 1 2 3 4 5 7 0 6 Source 1 5 2 3 1 9 2 9 4 9 3
  • 2.
    Dijkstra's Algorithm #Función paraconstruir adyacencia def constructAdj(edges, V): adj = [[] for _ in range(V)] for edge in edges: u, v, wt = edge adj[u].append([v, wt]) adj[v].append([u, wt]) return adj def dijkstra(V, edges, src): adj = constructAdj(edges, V) pq = [] # Cola de prioridad (min-heap) dist = [sys.maxsize] * V heapq.heappush(pq, [0, src]) dist[src] = 0 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist Edsger W. Dijkstra (1930-2002)
  • 3.
    1 2 3 4 5 7 0 6 Source 1 5 23 Dijkstra's Algorithm 1 9 2 9 4 9 3 adj = [[ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ],] edges = [[0, 1, 9], [0, 2, 4], [0, 3, 3], [1, 4, 2], [1, 6, 1], [2, 5, 1], [2, 7, 9], [3, 4, 2], [3, 5, 9], [4, 6, 5], [5, 7, 3]] u v wt #Función para construir adyacencia def constructAdj(edges, V): adj = [[] for _ in range(V)] for edge in edges: u, v, wt = edge adj[u].append([v, wt]) adj[v].append([u, wt]) return adj Input v = 8 adj = [[1,9], [0,9], [ ], [ ], [ ], [ ], [ ], [ ],] adj[0] adj[1] adj = [[1,9], [2,4], [0,9], [0,4], [ ], [ ], [ ], [ ], [ ],] adj = [[1,9], [2,4], [3,3] [0,9], [0,4], [0,3], [ ], [ ], [ ], [ ],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2] [0,4], [0,3], [1,2], [ ], [ ], [ ],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [0,3], [1,2], [ ], [1,1], [ ],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [5,1] [0,3], [1,2], [2,1], [1,1], [ ],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [5,1], [7,9] [0,3], [1,2], [2,1], [1,1], [2,9],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [5,1], [7,9] [0,3], [4, 2] [1,2], [3, 2] [2,1], [1,1], [2,9],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [5,1], [7,9] [0,3], [4, 2], [5, 9] [1,2], [3, 2] [2,1], [3, 9] [1,1], [2,9],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [5,1], [7,9] [0,3], [4, 2], [5, 9] [1,2], [3, 2], [6, 5] [2,1], [3, 9] [1,1], [4, 5] [2,9],] adj = [[1,9], [2,4], [3,3] [0,9], [4,2], [6,1] [0,4], [5,1], [7,9] [0,3], [4, 2], [5, 9] [1,2], [3, 2], [6, 5] [2,1], [3, 9], [7, 3] [1,1], [4, 5] [2,9], [5, 3]]
  • 4.
    1 2 3 4 5 7 0 6 ∞Source ∞ ∞ ∞ ∞ ∞ ∞ 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 def dijkstra(V, edges, src): adj = constructAdj(edges, V) pq = []# Cola de prioridad (min-heap) dist = [sys.maxsize] * V heapq.heappush(pq, [0, src]) dist[src] = 0 pq = [0, 0] dist nodo
  • 5.
    1 2 3 4 5 7 0 6 Source ∞∞ ∞ ∞ 0 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist ∞ ∞ ∞ adj[0] = [1,9], [2,4], [3,3] 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 ∞ ∞ ∞ ∞ ∞ ∞ ∞ pq = [0, 0]
  • 6.
    1 2 3 4 5 7 0 6 Source ∞∞ ∞ ∞ 0 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 pq = [0, 0], [9, 1] ∞ ∞ adj[0] = [1,9], [2,4], [3,3] 0 9 dist[ ] = vértice = 0 1 2 3 4 5 6 7 ∞ ∞ ∞ ∞ ∞ ∞ 9 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist
  • 7.
    1 2 3 4 5 7 0 6 Source ∞∞ ∞ ∞ 0 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 pq = [0, 0], [9, 1] ∞ adj[0] = [1,9], [2,4], [3,3] 0 9 3 dist[ ] = vértice = 0 1 2 3 4 5 6 7 ∞ ∞ ∞ ∞ ∞ 9 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist ∞
  • 8.
    1 2 3 4 5 7 0 6 Source ∞∞ ∞ ∞ 0 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 pq = [0, 0], [4, 2], [9, 1] adj[0] = [1,9], [2,4], [3,3] 0 9 3 dist[ ] = vértice = 0 1 2 3 4 5 6 7 ∞ ∞ ∞ ∞ ∞ 9 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist 4 ∞
  • 9.
    1 2 3 4 5 7 0 6 Source ∞∞ ∞ ∞ 0 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 adj[0] = [1,9], [2,4], [3,3] 0 9 3 dist[ ] = vértice = 0 1 2 3 4 5 6 7 ∞ ∞ ∞ ∞ ∞ 9 while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist 4 ∞ pq = [0, 0], [4, 2], [9, 1]
  • 10.
    1 2 3 4 5 7 0 6 Source ∞∞ ∞ ∞ 0 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 pq = [0, 0], [3, 3], [4, 2], [9, 1] adj[0] = [1,9], [2,4], [3,3] dist[ ] = vértice = 0 1 2 3 4 5 6 7 9 3 4 0 9 4 3 ∞ ∞ ∞ ∞ while pq: u = heapq.heappop(pq)[1] for x in adj[u]: v, weight = x[0], x[1] if dist[v] > dist[u] + weight: # Actualizar la distancia de v dist[v] = dist[u] + weight heapq.heappush(pq, [dist[v], v]) return dist
  • 11.
    1 2 3 4 5 7 0 6 9Source 4 3 ∞ ∞ ∞ ∞ 0 0 9 4 3 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {0,0} {4,2} Dijkstra's Algorithm 1 9 2 9 4 9 3 {9,1} {3,3}
  • 12.
    1 2 3 4 5 7 0 6 9Source 4 3 ∞ ∞ ∞ ∞ 0 0 9 4 3 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {3,3} {4,2} Dijkstra's Algorithm 1 9 2 9 4 9 3 {9,1}
  • 13.
    1 2 3 4 5 7 0 6 9Source 4 3 5 11 ∞ ∞ 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {9,1} Dijkstra's Algorithm 1 9 2 9 4 9 3 {11,5} {5,4} 0 9 4 3 5 11 {4,2}
  • 14.
    1 2 3 4 5 7 0 6 9Source 4 3 5 11 ∞ ∞ 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {9,1} Dijkstra's Algorithm 1 9 2 9 4 9 3 {11,5} {5,4} 0 9 4 3 5 11 {4,2}
  • 15.
    1 2 3 4 5 7 0 6 9Source 4 3 5 5 13 ∞ 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {9,1} Dijkstra's Algorithm 1 9 2 9 4 9 3 {13,7} {5,5} 0 9 4 3 5 5 13 {5,4}
  • 16.
    1 2 3 4 5 7 0 6 9Source 4 3 5 5 13 ∞ 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {9,1} Dijkstra's Algorithm 1 9 2 9 4 9 3 {13,7} {5,5} 0 9 4 3 5 5 13 {5,4}
  • 17.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 13 10 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {10,6} Dijkstra's Algorithm 1 9 2 9 4 9 3 {13,7} {7,1} 0 7 4 3 5 5 10 13 {5,5}
  • 18.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 13 10 0 dist[ ] = vértice = 0 1 2 3 4 5 6 7 push pop 1 5 2 3 {10,6} Dijkstra's Algorithm 1 9 2 9 4 9 3 {13,7} {7,1} 0 7 4 3 5 5 10 13 {5,5}
  • 19.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 10 0 push pop 1 5 2 3 {8,7} Dijkstra's Algorithm 1 9 2 9 4 9 3 {10,6} {7,1} {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 10 8
  • 20.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 10 0 push pop 1 5 2 3 {8,7} Dijkstra's Algorithm 1 9 2 9 4 9 3 {10,6} dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 10 8 {7,1}
  • 21.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 8 0 push pop 1 5 2 3 {8,6} Dijkstra's Algorithm 1 9 2 9 4 9 3 {8,7} {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 8 8
  • 22.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 8 0 push pop 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 {8,7} {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 8 8 {8,6}
  • 23.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 8 0 push pop 1 5 2 3 {8,6} Dijkstra's Algorithm 1 9 2 9 4 9 3 {8,7} {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 8 8
  • 24.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 8 0 push pop 1 5 2 3 {8,6} Dijkstra's Algorithm 1 9 2 9 4 9 3 {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 8 8 {8,7}
  • 25.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 8 0 push pop 1 5 2 3 Dijkstra's Algorithm 1 9 2 9 4 9 3 {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 8 8
  • 26.
    1 2 3 4 5 7 0 6 7Source 4 3 5 5 8 8 0 1 2 3 {8,7} Dijkstra's Algorithm 1 2 4 3 {5,5 dist[ ] = vértice = 0 1 2 3 4 5 6 7 0 7 4 3 5 5 8 8 5 9 9 9