def dijkstra(start, end): data = Data_Manager() cities = data.get_cities() D = {} P = {} for city in cities: D[city] = float('inf') P[city] = "" D[start] = 0 remain_cities = cities while len(remain_cities) > 0: short = None city = '' for x in remain_cities: if short == None: short = D[x] city = x elif D[x] < short: short = D[x] city = x remain_cities.remove(city) connects = data.get_conn(city) for x in connects: #|||(weight, type, cost, time) if x[1] == city: if D[x[2]] == float('inf'): D[x[2]] = D[city] + x[0] P[x[2]] = city elif D[x[2]] > D[city] + x[0]: D[x[2]] = D[city] + x[0] P[x[2]] = city path = [] node = end while node != start: if path.count(node) == 0: path.insert(0, node) node = P[node] else: break path.insert(0, start) return (D[end], path)