-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy path815-bus-routes.py
29 lines (26 loc) · 976 Bytes
/
815-bus-routes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from collections import defaultdict, deque
class Solution:
def numBusesToDestination(self, routes: List[List[int]], source: int, target: int) -> int:
stop_route = defaultdict(list)
for i, r in enumerate(routes):
for stop in r:
stop_route[stop].append(i)
visited = set()
queue = deque([(source, 0)])
while queue:
stop, step = queue.popleft()
if stop == target:
return step
for r in stop_route[stop]:
if r in visited:
continue
visited.add(r)
for stop in routes[r]:
queue.append((stop, step + 1))
return - 1
# time (n*m)
# space O(n*m), due to building graph, n is the number of routes, m is the number of stops
# using graph and bfs with single source
'''
1. when building graph, using bus route instead of bus stop
'''