def Dijkstra(graph, source): starting_v = source - 1 vertices_list = graph.return_vertices_list() unvisited = [] dist = [0] * len(vertices_list) prev = [None] * len(vertices_list) def return_weight(graph, v1, v2): edges_list = graph.return_neighbor_edges(v1) edge = edges_list[edges_list[:, 1] == v2] weight = edge[0][2] return weight for vertice in vertices_list: dist[vertice - 1] = float('inf') prev[vertice - 1] = 0 unvisited.append(vertice) dist[starting_v] = 0 while unvisited: minim = min(dist) min_v_index = dist.index(minim) examined_v = unvisited[min_v_index] del unvisited[min_v_index] neighbors_list = graph.return_neighbor_edges(examined_v) for neighbor in neighbors_list: v_in = neighbor[1] v_in_index = v_in - 1 alt = dist[min_v_index] + return_weight(graph, examined_v, v_in) if (alt < dist[v_in_index]): dist[v_in_index] = alt prev[v_in_index] = examined_v return dist, prev distances, closest_n = Dijkstra(vers, 1) print('Vertice:', [1, 2, 3, 4, 5]) print('Closest:', closest_n) print('Weights:', distances)