Leetcode815.公交线路 Bus Routes(Java)

##BFS##

广度优先搜索

2021-03 阿里春招题目

该题应该为图论题,边有权值的情况下寻找最短路径,采用多源BFS解决

示例 1:

输入:routes = [[1,2,7],[3,6,7]], source = 1, target = 6
输出:2
解释:最优策略是先乘坐第一辆公交车到达车站 7 , 然后换乘第二辆公交车到车站 6 。

  • 使用HashMap<Integer, LinkedList<Integer>> map保存每个站点经过的线路,例如示例1中(key = 7, value = [0,1])的键值对代表的是7号公交站点存在与公交线路0、1中
  • LinkedList<Integer> queue队列为BFS中遍历的辅助队列,存放每一层需要遍历的站点
  • 已示例1为例,BFS遍历第一层流程如下,初始化队列queue只有source = 1一个元素
    • 遍历队列中元素查询HashMap中包含站点1的所有线路,得线路0
    • 遍历线路0的所有站点j = 2,7
      • j == target,找到目标站点,返回结果
      • 对于所有非目标站点j,都为下一层需要遍历的节点,都需要进队列等待遍历
    • 遍历完第一层所有j后,代表的实际含义是从站点1出发,乘坐一辆公共汽车能够到达的所有站点j
    • 因此遍历完一层后,公交车计数器cnt++
  • 同样的遍历方法,遍历至结果出现或遍历结束为止
  • 因为图有环路,因此可能会发生遍历死循环,
    • 采用自动去重的HashSet<Integer> set来记录已经遍历过的线路
    • 如果使用HashSet<Integer> set记录已经遍历过的站点,最用一个用例会因为超时而不通过

时间复杂度: O ( M × N ) O(M\times N) O(M×N)

class Solution {public int numBusesToDestination(int[][] routes, int source, int target) {if (source == target) return 0; // 目标站点等于起始结点,不用乘车HashMap<Integer, LinkedList<Integer>> map = new HashMap<>(); //保存每个站点经过的路线for (int i = 0; i < routes.length; i ++) { //初始化for (int j = 0; j < routes[i].length; j ++) {if (!map.containsKey(routes[i][j])) {map.put(routes[i][j], new LinkedList<Integer>());}LinkedList<Integer> temp = map.get(routes[i][j]);temp.add(i);} }HashSet<Integer> set = new HashSet<>(); // 记录已经遍历过的线路LinkedList<Integer> queue = new LinkedList<Integer>(); // BFS辅助队列queue.add(source);int res = -1, cnt = 1; // cnt为公交车计数器while (!queue.isEmpty()) {int len = queue.size();  // 获取该层元素的数量for (int k = 0; k < len; k ++) { // 遍历一层int ele = queue.pollFirst();LinkedList<Integer> lines = map.get(ele); // 获取站点对应的线路for (int i : lines) {if (set.contains(i)) continue; // 线路已经完成遍历set.add(i); // set中更新线路for (int j : routes[i]) { // 将下一层站点放入队列中queue.offerLast(j);if (j == target) { // 找到结果返回return cnt; }}}}cnt ++; // 完成一层遍历后,公交车计数器加一}return res; // 返回-1,起始站点与目标站点不能连通}
}

Leetcode815.公交线路 Bus Routes(Java)相关推荐

  1. JAVA JSP城市公交查询系统 jsp公交线路查询系统Java公交查询系统Java公交线路查询

    JSP城市公交查询系统 jsp公交线路查询系统Java公交查询系统Java公交线路查询

  2. [Leetcode] Bus Routes 公交线路

    Bus Routes 详细解题思路请访问:https://yanjia.me/zh/2018/11/... We have a list of bus routes. Each routes[i] i ...

  3. 微信公众号开发(公交线路查询-JAVA

    一.Dom4j的使用    在介绍公交线路开发之前,先简单介绍下Dom4j的使用,因为公交线路查询引用的是爱帮公交api,调用结果为xml格式文件,故用到了Dom4j这个包,当然还有其他的包来读取xm ...

  4. 线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路

    状压与矩阵加速的藕断丝连 Quad Tiling description solution code [Hnoi2010]Bus 公交线路 description solution code Quad ...

  5. 【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法

    [BZOJ2004][Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1 ...

  6. java实现找一条转乘次数最少的公交线路?,基于最优换乘次数的城市公交查询算法...

    摘要:城市公交查询系统是一个城市非常重要的基础设施,也是城市文明的一个重要标志.该文探讨城市公交查询系统中最优换乘次数的查询算法.算法以图论中邻接矩阵为基础,结合矩阵算术运算的特点和公交查询系统的要求 ...

  7. JAVA毕业设计公交线路查询系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计公交线路查询系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计公交线路查询系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...

  8. java 公交管理系统 代码_java公交线路管理系统

    展开全部 //写了两个小时啊,兄弟,要采纳我啊 //Site(站点类) package transit; import java.util.ArrayList; import java.util.Li ...

  9. JAVA爬虫-上海公交线路爬取

    最开始的数据获取也有两个思路  虽然我的数据不是这么来的 一 .http://www.zuobus.com/line-overview.php?c=2 这个网站有所有的上海的公交线路 二.百度poi ...

最新文章

  1. 基于纯 CSS3 技术实现美观的标签云效果
  2. 卷积为什么如此强大?一文全解深度学习中的卷积
  3. 最新BAT大厂面试者整理的Android面试题目模板,分享PDF高清版
  4. 日期格式转换,正则匹配后转换;指定时间增加天数加转格式;js时间转换格式
  5. php 并发出站,PHP控制站点并发
  6. 配置sharepoint站点为Form认证(下)
  7. VS2015 Visual Assist X 破解版安装教程
  8. 新手自己搭建服务器步骤
  9. 华为模拟器eNSP练习题 - VLAN综合实验
  10. 天文竞赛怎么用计算机,师范生教学技能大赛!计算机设计大赛!主持礼仪风采大赛!天文台活动预告!民宿企划竞赛!舞蹈大赛!...
  11. 自动化测试框架[Cypress元素操作详解]
  12. 大规模时间序列数据自动异常检测架构
  13. php word 添加,PHP 实现Office word 关键词添加背景色
  14. 关于透明桌面相框图片不能显示的问题
  15. matlab中(),[],与{}的使用区别
  16. USB是如何诞生的?
  17. 一屏变双屏,有了ProPresenter 6你也可以做到!
  18. endnote 进行 convert to plain text操作后word格式大变问题解决办法
  19. SIGIR‘21因果推断——不要把流行度偏差一棍子打死Causal Intervention for Leveraging Popularity Bias in Recommendation
  20. think-cell高阶教程(1)——单一窗口管理所有数据链接的自动更新

热门文章

  1. LTE学习笔记--LTE无线连接过程--切换
  2. 计算机相关的迎新标语,创意新颖的迎新标语
  3. 2019天猫双11销售额预测:2583.387亿
  4. linux3.4.2内核移植详解(六):基于UVC的USB摄像头内核配置
  5. 粒子机器人,能否敲开机器意识觉醒之门?
  6. PPT文件打开密码怎么找回
  7. java计算机毕业设计科学评价系统源程序+mysql+系统+lw文档+远程调试
  8. vue中的.sync修饰符
  9. sync.Mutex 与 sync.WaitGroup 使用示例
  10. Kafak快速入门攻略