-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBus_Routes.py
38 lines (34 loc) · 1.21 KB
/
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
30
31
32
33
34
35
36
37
38
from collections import deque
class Solution:
def numBusesToDestination(self, routes: List[List[int]], source: int, target: int) -> int:
if source == target:
return 0
stops = collections.defaultdict(list)
q = deque()
end = set()
visited = set()
for i, route in enumerate(routes):
for stop in route:
stops[stop].append(i)
if stop == source:
q.append((i, 1))
visited.add(i)
if stop == target:
end.add(i)
edges = collections.defaultdict(set)
for stop in stops:
buses = stops[stop]
m = len(stops[stop])
for u in range(m - 1):
for v in range(u, m):
edges[buses[u]].add(buses[v])
edges[buses[v]].add(buses[u])
while q:
curr, dis = q.popleft()
if curr in end:
return dis
for neighbor in edges[curr]:
if not neighbor in visited:
visited.add(neighbor)
q.append((neighbor, dis + 1))
return -1