0
点赞
收藏
分享

微信扫一扫

公交路线

E_topia 2021-09-21 阅读 44
今日算法
题目描述:
说明:
示例 1:
示例 2:
思路:
  • 首先需要知道1号站可以坐哪些公交,这些公交都需要作为起点记录下来。依次尝试。

  • 然后我们还需要一个站牌,能让我们知道,当前站可以选择哪些公交。

  • 最后就可以开始一个一个尝试,并记录下已经选择过的车。


      Queue<Integer> queue = new LinkedList();
        Map<Integer, Integer> map = new HashMap();
        Map<Integer, Set<Integer>> stopSign = new HashMap();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < routes[i].length; j++) {
                if (source == routes[i][j]) {
                    queue.offer(i);
                    map.put(i, 1);
                }
                Set<Integer> set = stopSign.get(routes[i][j]);
                if (set == null) {
                    set = new HashSet();
                }
                set.add(i);
                stopSign.put(routes[i][j], set);
            }
        }

代码实现:
class Solution {
    public int numBusesToDestination(int[][] routes, int source, int target) {
        if (source == target) return 0;
        return bfs(routes, source, target);
    }
    public int bfs(int[][] routes, int source, int target) {
        
        int m = routes.length;
      
        Queue<Integer> queue = new LinkedList();
        Map<Integer, Integer> map = new HashMap();
        Map<Integer, Set<Integer>> stopSign = new HashMap();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < routes[i].length; j++) {
                if (source == routes[i][j]) {
                    queue.offer(i);
                    map.put(i, 1);
                }
                Set<Integer> set = stopSign.get(routes[i][j]);
                if (set == null) {
                    set = new HashSet();
                }
                set.add(i);
                stopSign.put(routes[i][j], set);
            }
        }
        while (!queue.isEmpty()) {
            int start = queue.poll();
            int num = map.get(start);
            for (int i = 0; i < routes[start].length; i++) {
                if (routes[start][i] == target) {
                    return num;
                }
               Set<Integer> set = stopSign.get(routes[start][I]);
               for (Integer station : set) {
                   if (!map.containsKey(station)) {
                       queue.offer(station);
                       map.put(station, num + 1);
                   }
               }
            }
        }
        return -1;
    }
}
举报

相关推荐

0 条评论