当前位置: 首页 > news >正文

力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)

目录

  • 题目描述:
  • 示例 :
  • 代码实现:

题目描述:

给你一个整数 n 和一个二维整数数组 queries。
有 n 个城市,编号从 0 到 n - 1。初始时,每个城市 i 都有一条单向道路通往城市 i + 1( 0 <= i < n - 1)。
queries[i] = [ui, vi] 表示新建一条从城市 ui 到城市 vi 的单向道路。每次查询后,你需要找到从城市 0 到城市 n - 1 的最短路径的长度。
返回一个数组 answer,对于范围 [0, queries.length - 1] 中的每个 i,answer[i] 是处理完前 i + 1 个查询后,从城市 0 到城市 n - 1 的最短路径的长度。

示例 :

输入: n = 5, queries = [[2, 4], [0, 2], [0, 4]]
输出: [3, 2, 1]
解释:
在这里插入图片描述
新增一条从 2 到 4 的道路后,从 0 到 4 的最短路径长度为 3。
在这里插入图片描述
新增一条从 0 到 2 的道路后,从 0 到 4 的最短路径长度为 2。
在这里插入图片描述
新增一条从 0 到 4 的道路后,从 0 到 4 的最短路径长度为 1。

代码实现:

class Solution {public int[] shortestDistanceAfterQueries(int n, int[][] queries) {// 初始化答案列表List<Integer> answer = new ArrayList<>();// 初始化图:表示当前点能到达其他位置的集合List<List<Integer>> graph = new ArrayList<>();for (int i = 0; i < n; i++) {graph.add(new ArrayList<>());// 添加0到n-1个城市}// 添加初始的单向边for (int i = 0; i < n - 1; i++) {graph.get(i).add(i + 1);// 表示第i个城市可以到达第i+1个城市}// 处理每一个查询for (int[] query : queries) {int u = query[0];// 起点int v = query[1];// 终点// 添加新建的单向边graph.get(u).add(v);// 使用BFS计算从城市0到城市n-1的最短路径长度answer.add(bfsShortestPath(graph, n));}// 将列表转换为数组int[] res = new int[answer.size()];for (int i = 0; i < answer.size(); i++) {res[i] = answer.get(i);}return res;}int bfsShortestPath(List<List<Integer>> graph, int n) {// 队列用于BFSQueue<Integer> queue = new LinkedList<>();// 距离数组用于记录从0到其他节点的距离int[] dist = new int[n];Arrays.fill(dist, Integer.MAX_VALUE);// 将dist数组所有元素初始化为Integer中的最大值dist[0] = 0;// 初始化0到第0个城市,距离为0queue.offer(0);// 入队// 从0开始广度优先搜索队列内元素while (!queue.isEmpty()) {// 当队列为空时,跳出循环int current = queue.poll();// 出队当前队头元素for (int neighbor : graph.get(current)) {// 遍历当前队头元素在图上可达邻点if (dist[neighbor] == Integer.MAX_VALUE) {// 如果邻点为初始值时dist[neighbor] = dist[current] + 1;// 更新最短距离queue.offer(neighbor);// 并且让邻点入队}}}return dist[n - 1];// 返回dist数组中尾部元素,即当前路径中0到n-1的最短距离}
}
http://www.lryc.cn/news/415179.html

相关文章:

  • 程序开发的常用设计思想
  • Qt之Gui
  • Linux操作系统之进程信号
  • 科普文:微服务之Spring Cloud Alibaba消息队列组件RocketMQ工作原理
  • 黑马头条vue2.0项目实战(五)——首页—频道编辑
  • Java:基础语法
  • 安装bedtools详细步骤和详细介绍bedtools用法
  • 21 - grace数据处理 - 补充 - 泄露误差改正 - Slepian局部谱分析法(一) - slepian分析法理论理解
  • WLAN国家码与信道顺从表
  • 行为型设计模式1:状态/策略/命令
  • 【知识专栏丨python数分实战】天猫订单数据分析及可视化|taobao天猫订单接口
  • [kimi笔记]为什么csc.exe不可以双击运行
  • 护眼大路灯哪个牌子好?2024学生护眼大路灯推荐
  • Vue项目中手搓滑动校验模块-demo
  • Socket如何实现客户端和服务器间的通信
  • 基于Spring boot + Vue的校园论坛
  • RabbitMQ高级特性 - 生产者消息确认机制
  • webpack的loader机制
  • (STM32笔记)十一、通过EXTI外部中断实现 按键控制LED
  • 假如家里太大了,wifi连不上了怎么办
  • elementPlus 设置el-input文本域固定高度和禁止下拉
  • (转)领导人必过的三道关
  • 速盾:cdn可以定时刷新缓存吗?
  • 代码随想录算法训练营第二十九天| 62.不同路径、63. 不同路径 II
  • Go+Redis零基础到用户管理系统API实战_20240730 课程笔记
  • ScreenAgent:基于LVLM的计算机控制智能体
  • 谷粒商城实战笔记-129-商城业务-商品上架-nested数据类型场景
  • axios请求响应拦截器
  • Python 中单例模式实现的几种方式
  • mysql数据库触发器同步数据