leetcode_gym/_code/graphs/cheapestFlight/cheapestFlightsWithinKStops.py

33 lines
738 B
Python
Raw Normal View History

import collections
n = 3
edges = [[0,1,100],[1,2,200],[0,2,500]]
src = 0
dst = 2
k = 1
def findCheapestPrice(n, flights, src, dst, K):
if src == dst: return 0
d, seen = collections.defaultdict(list), collections.defaultdict(lambda: float('inf'))
for u, v, p in flights:
d[u] += [(v, p)]
q = [(src, -1, 0)]
while q:
pos, k, cost = q.pop(0)
if pos == dst or k == K: continue
for nei, p in d[pos]:
if cost + p >= seen[nei]:
continue
else:
seen[nei] = cost+p
q += [(nei, k+1, cost+p)]
return seen[dst] if seen[dst] < float('inf') else -1
print( findCheapestPrice(n, edges, src, dst, k) )