LeetCode_BFS_中等_1466.重新规划路线

news2024/11/20 13:38:44

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 a 到 b 的一条有向路线。

今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。请你帮助重新规划路线方向,使每个城市都可以访问城市 0。返回需要变更方向的最小路线数。

题目数据保证每个城市在重新规划路线方向后都能到达城市 0。

示例 1:

在这里插入图片描述

输入:n = 6, connections = [[0,1],[1,3],[2,3],[4,0],[4,5]]
输出:3
解释:更改以红色显示的路线的方向,使每个城市都可以到达城市 0 。

示例 2:

在这里插入图片描述

输入:n = 5, connections = [[1,0],[1,2],[3,2],[3,4]]
输出:2
解释:更改以红色显示的路线的方向,使每个城市都可以到达城市 0 。

示例 3:
输入:n = 3, connections = [[1,0],[2,0]]
输出:0

提示:
2 <= n <= 5 * 104
connections.length == n - 1
connections[i].length == 2
0 <= connections[i][0], connections[i][1] <= n-1
connections[i][0] != connections[i][1]

2.思路

(1)BFS

3.代码实现(Java)

//思路1————BFS
class Solution {
    public int minReorder(int n, int[][] connections) {
        List<Integer>[] graph = buildGraph(n, connections);
        //以城市 0 为根节点,将城市之间的路线看作树,levels[i] 表示城市 i 所在的层数
        int[] levels = new int[n];
        Arrays.fill(levels, -1);
        //城市 0 在第 0 层
        levels[0] = 0;
        Queue<Integer> queue = new ArrayDeque<>();
        queue.offer(0);
        while (!queue.isEmpty()) {
            int city = queue.poll();
            for (int next : graph[city]) {
                if (levels[next] < 0) {
	                //更新当前城市所在的层数
                    levels[next] = levels[city] + 1;
                    queue.offer(next);
                }
            }
        }
        int res = 0;
        //计算需要调整的最小路线数
        for (int[] connection : connections) {
            if (levels[connection[0]] < levels[connection[1]]) {
                res++;
            }
        }
        return res;
    }

	//构建双向图的表示————邻接表
    public List<Integer>[] buildGraph(int n, int[][] connections) {
        ArrayList[] graph = new ArrayList[n];
        for (int i = 0; i < n; i++) {
            graph[i] = new ArrayList<>();
        }
        for (int[] connection : connections) {
            int a = connection[0];
            int b = connection[1];
            graph[a].add(b);
            graph[b].add(a);
        }
        return graph;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Maven安装及环境配置教程

一、安装 1、安装包 apache-maven-3.6.3 安装包下载地址 2、下载安装包然后直接解压就行。 注意&#xff1a;文件的位置路径不能有中文。 二、环境配置 1、用户变量 双击Path&#xff0c;点击新建&#xff0c;将如下复制进去&#xff0c;然后点击确定&#xff1a; %MAVEN_HO…

轻量服务器域名无法解析怎么排查?

​  轻量服务器域名无法解析是指在DNS(域名系统)解析过程中&#xff0c;无法将域名转换为相应的IP地址。DNS可帮助该域名与代表该网站在互联网上的位置的数字 IP 地址相关联&#xff0c;帮助我们找到并连接到目标网站。因此&#xff0c;当我们无法解析域名时&#xff0c;就无…

CENTOS7-安装部署httpd或apache

1、在Centos中安装apache服务器 yum install httpd* -y 2、启动apache&#xff0c;可以查看运行状态&#xff0c;如图&#xff1a; 启动命令&#xff1a;systemctl status httpd.service 有active running说明已经安装好&#xff0c;并且可以正常启动。 3、设置主目录&…

SpringBoot结合Filter的登录认证退出流程(介绍后端要做的事)

交互流程 简略图 注意&#xff1a; 点击访问进入应用后前端要获取url中的openId存放在所有请求的请求头里&#xff0c;用于后端在拦截器中判断是否有openId和调用中台接口判断openId是否有效 后端 后端主要做三件事&#xff1a; 搞个拦截器用于判断是否有openId和调用中台接…

手机远程连接登录Windows桌面

RDClient远程连接&#xff0c;手机远程电脑&#xff0c;手机远程Windows&#xff0c;手机连接Windows 因为工作需求&#xff0c;笔记本不经常带在身上&#xff0c;有时候需要用手机远程连接电脑操作一下 安卓手机和IPhone手机都可以&#xff0c;用的是微软官方的Remote Deskt…

【Java】Stack和Queue的使用

文章目录 一、栈1.1 什么是栈1.2 栈的模拟实现 二、Java中的Stack2.1 构造方法2.2 操作方法2.3 应用场景 三、队列3.1 什么是队列3.2 队列的模拟实现 四、Java中的Queue4.1 实例化方法4.2 操作方法4.3 应用场景 一、栈 1.1 什么是栈 栈&#xff08;Stack&#xff09;是一种常…

VSCODE VUE3 element-ui plaus 环境搭建

目录 一、VUE 1、安装VUE 2、创建项目 二、Element Plus 1、在项目目录中安装 Element Plus&#xff0c;执行 2、引入element 三、vscode 中运行 1、打开项目文件夹 2、点击debug&#xff0c;运行 1&#xff09;、首次lanch chrome时 2&#xff09;、lanch node.js …

【python】pycharm配置Github Copilot

1.获取github的ip import socket from urllib.parse import urlparse# 通过URL获取目标服务器IP和端口号 def get_server_ip_and_port(url):# 解析URL获取域名和端口号parsed_url urlparse(url)domain parsed_url.netlocport parsed_url.port or 80try:# 进行域名解析&…

基于matlab使用光学字符识别技术识别文本(附源码)

一、前言 此示例演示如何使用计算机视觉工具箱中的函数执行光学字符识别。 二、实例 识别图像中的文本在许多计算机视觉应用程序中非常有用&#xff0c;例如图像搜索、文档分析和机器人导航。该函数提供了一种将文本识别功能添加到各种应用程序的简单方法。 函数返回已识别的…

VS2022配置OpenCV4.7.0

1、下载并解压OpenCV OpenCV与VC版本的对应关系信息&#xff1a;OpenCV解压后在\opencv\build\x64文件夹下可以看到如下文件夹&#xff1a; 其中&#xff1a;vc16 Visual Studio 2019 2、配置环境变量 双击Path进入【编辑环境变量】界面&#xff0c;新建—>浏览将opencv\b…

半导体自动化专用风机风棒的特点

半导体自动化专用离子风机是一种专门用于半导体工业领域的设备。它采用了离子风技术&#xff0c;通过产生带电离子来达到除尘、静电消除、表面清洁等功能。 半导体生产过程中&#xff0c;电子元器件的制造需要保持高度的清洁和静电控制。离子风机通过释放正负电离子对空气中的…

剑指 Offer 41: 数据流中的中位数

这道题用的优先队列非常好&#xff0c;一边维护一个左半边&#xff0c;一边维护一个右半边。&#xff08;注意&#xff1a;较大的一半不用改变规则&#xff0c;因为出都是默认出小的&#xff09;。然后每次和小的队列开头的数比较&#xff08;即偏小那个队列的最大值&#xff0…

【广州华锐互动】医疗健康数字孪生可视化系统有哪些功能?

医疗健康数字孪生可视化系统是一种将现实世界中的医疗设备、医院环境和患者数据与虚拟世界中的数字化副本相连接的技术。通过收集和分析实时数据&#xff0c;医疗健康数字孪生可视化系统可以帮助医疗机构提高运行效率、降低成本、优化资源分配&#xff0c;并为患者提供更好的诊…

2023工业自动化发展十大趋势

凭借着多年的行业经验和各种数据的汇总,推断出了在未来几年中,制药、服务和农业行业可能会在使用协作机器人技术方面处于重要地位,并且预估工业机器人自动化行业会有以下十大趋势变化。 1、对智能传感器的需求增加 质量检查是所有行业的关键组成部分,分析从食品到电话保护…

Spring MVC相关注解运用 —— 下篇

目录 一、ResponseBody、RestController 1.1. JSP页面 1.2 放行静态资源 1.3 编写实体类 1.4 控制器方法 1.5 添加依赖 1.6 测试结果 1.7 RestController 二、静态资源映射 2.1 配置静态资源筛查器 2.2 配置静态资源资源映射器 2.3 配置默认Servlet处理静态资源 三…

Element UI日期组件-选择月份具体到当月最后一天

Element已有的月份选择组件&#xff0c;只能展示开始月份的1号到结束月份的1号&#xff08;例如&#xff1a;开始月份为3月&#xff0c;结束月份为3月&#xff0c;input框内只能展示2023-03-01至2023-03-01&#xff09;&#xff0c;但是我们的需求想要展示的是2023-03-01至2023…

AIGC - Stable Diffusion 超分辨率插件 StableSR v2 (768x768) 配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131582734 论文&#xff1a;Exploiting Diffusion Prior for Real-World Image Super-Resolution StableSR 算法提出了一种新颖的方法&#xff0…

【Java项目】Vue+ElementUI+Ceph实现多类型文件上传功能

文章目录 前端后端Java 前端 ElementUI 文件上传的页面使用的是ElementUI的 下面是index.vue页面&#xff0c;有点小bug&#xff08;但是我真改不动&#xff0c;前端还在学习中&#xff09; <template><div><el-uploadclass"upload-demo":action&qu…

1.浮动 ( float )

学习目标&#xff1a; 1.1 传统网页布局的三种方式 网页布局的本质——用 CSS来摆放盒子&#xff0c;把盒子摆放到相应位置 CSS提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序) : ●普通流(标准流) ●浮动 ●定位 1.2 标准流(普通流/文档流) 所谓的标准流&#xf…

Go基础知识学习

文章目录 介绍背景和起源特点和优势 安装和设置下载和安装Go语言配置Go环境变量GOROOT和GOPATHGOPROXY 编辑器、IDE等工具Hello, World!基本结构和数据类型关键字标识符变量常量基本数据类型类型转换 控制流程数组和切片数组切片 函数定义和调用函数函数参数和返回值 结构体和方…