class Solution { public int numBusesToDestination(int[][] routes, int S, int T) { if (S == T) return 0; Set<Integer> visited = new HashSet<>(); Queue<Integer> q = new LinkedList<>(); Map<Integer, ArrayList<Integer>> map = new HashMap<>(); int res = 0; for (int i = 0; i < routes.length; i++) { for (int j = 0; j < routes[i].length; j++) { ArrayList<Integer> buses = map.getOrDefault(routes[i][j], new ArrayList<>()); buses.add(i); map.put(routes[i][j], buses); } } q.offer(S); while (!q.isEmpty()) { int len = q.size(); res++; for (int i = 0; i < len; i++) { int cur = q.poll(); ArrayList<Integer> buses = map.get(cur); for (int bus: buses) { if (visited.contains(bus)) continue; visited.add(bus); for (int j = 0; j < routes[bus].length; j++) { if (routes[bus][j] == T) return res; q.offer(routes[bus][j]); } } } } return -1; } }
近期评论