33 lines
738 B
Python
33 lines
738 B
Python
|
|
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) )
|