I am creating a dijkstra algo. python code but this is the result when I try to run it.
temp = min_heap[0][1]
IndexError: list index out of range
What to I need to change?
What I have tried:
def dijkstra(graph, source, destination):
inf = sys.maxsize
node_data = {'A': {'cost': inf, 'pred': []},
'B': {'cost': inf, 'pred': []},
'C': {'cost': inf, 'pred': []},
'D': {'cost': inf, 'pred': []},
'E': {'cost': inf, 'pred': []},
}
node_data[source]['cost'] = 0
visited = []
temp = source
for i in range(5):
if temp not in visited:
visited.append(temp)
min_heap = []
for j in graph[temp]:
if j not in visited:
cost = node_data[temp]['cost'] + graph[temp][j]
if cost < node_data[j]['cost']:
node_data[j]['cost'] = cost
node_data[j]['pred'] = node_data[temp]['pred'] + [temp]
heappush(min_heap, (node_data[j]['cost'], j))
heapify(min_heap)
temp = min_heap[0][1]
print("Shortest Distance: " + str(node_data[destination]['cost']))
print("Shortest Path: " + str(node_data[destination]['pred'] + list(destination)))
if __name__ == "__main__":
graph = {
'A': {'B': 2, 'C': 3},
'B': {'A': 2, 'C': 4, 'D': 7},
'C': {'A': 3, 'B': 4, 'D': 2, 'E': 5},
'D': {'B': 7, 'C': 2, 'E': 1},
'E': {'C': 5, 'D': 1}
}
source = 'A'
destination = 'F'
dijkstra(graph, source, destination)