【LeetCode75】第四十五题 重新规划路线

news2025/1/19 14:30:19

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

给我们一个表示城市连通情况的有向图,要求每个城市都要可以通向0号城市,不同城市之间只有一条路线,我们每次可以改变一条路线的指向,问我们需要操作多少次才可以达到每个城市都可以通向0号城市的要求。

由于不同城市之间只有一条路线,那么如果不看路线指向的话,将其看作是一个无向图,那么它就只是一棵树而已,而树的根节点就是0号城市,因为题目保证每个城市都能够在规划路线之后通往0号城市。

那么实际上我们可以通过根节点遍历到一棵树的每一个节点,并且路线是唯一的,所以我们可以当作遍历一棵树一样,通过遍历0号城市来通向每个城市,在发现节点之间的指向不对时,将操作次数加一,再遍历完所有城市之后,即可获取所有操作次数。

首先我们先构造图,一般构造图是用的map,不过这边的城市是连号的,那么直接用数组存放就可以了,下标就是对应的城市。

构造图是遍历城市的连接情况,只要两个城市的相连的,先不管方向,就在对应的位置加上对方城市,如果方向是走得到的就加个true的标记,如果是走不到的就加个false标记。

遍历完城市连接情况,图也就初步构建完毕。

接着我们从0号城市开始遍历,首先遍历和0号城市相邻的城市,这边要注意不走回头路,否则会死循环,所以dfs中需要记录一下当前城市的上一个城市,也就是该城市通往0号城市的路上的第一个城市。

遍历时我们看一下方向,如果方向是正确的,也就是向着0号城市的我们就不管,反之操作次数+1。接着再以此城市开始新一轮的DFS,直到遍历结束,我们将操作次数返回即可。

代码:

class Solution {
public:
    //int minReorder(int n, vector<vector<int>>& connections) {
    //     暴力超时
    //     vector<bool>can(n,false);
    //     can[0]=true;
    //     int res=0;
    //     int check=1;
    //     while(check!=n){
    //         for(vector<int>c:connections){
    //             if(can[c[0]]&&!can[c[1]]){
    //                 can[c[1]]=true;
    //                 reverse(c.begin(),c.end());
    //                 res++;
    //                 check++;
    //             }
    //             if(can[c[1]]&&!can[c[0]]){
    //                 can[c[0]]=true;
    //                 check++;
    //             }
    //         }
    //     }
    //     return res;
    // }
    int res=0;
    void build(int n, vector<vector<int>>& connections){    //构造图,将相邻的城市都联系起来
        for(auto &c:connections){
            graph[c[0]].push_back({c[1],true});
            graph[c[1]].push_back({c[0],false});
        }
    }
    void dfs(int cur,int pre){
        for(auto &c:graph[cur]){    //遍历与当前城市相连的城市    
            if(c.first!=pre){       //不走回头路
                if(c.second==true)  //如果是反方向,那么需要将其转个方向,res++
                    res++;
                dfs(c.first,cur);   //接着走下去
            }
        }
    }
    vector<vector<pair<int,bool>>>graph;
    int minReorder(int n, vector<vector<int>>& connections) {
        graph.resize(n,vector<pair<int,bool>>(0));
        build(n,connections);
        dfs(0,-1);
        return res;
    }
};

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

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

相关文章

Gteam2.0免授权毛玻璃拟态UI带后台版本修复版

程序使用PHP7版本运行 后台信息/Admin 账号admin 密码123456 后台功能 多管理员、系统日志等等功能

知识图谱实战应用26-基于知识图谱构建《本草纲目》的中药查询与推荐项目应用

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用26-基于知识图谱构建《本草纲目》的中药查询与推荐项目应用,本文通过Py2neo连接到知识图谱数据库,系统实现了中药的快速查询、关系分析、智能推荐和知识展示等功能。用户可以输入中药的名称或特征进行查询,系统将从知…

1778_树莓派系统安装

全部学习汇总&#xff1a; GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 一段视频学习教程的总结&#xff0c;对我来说基本上用处不大。因为我自己的树莓派简简单单安装完就开机成功了&#xff0c;而且实现了很多视频中介绍的功能。 …

人工智能研究的未来:20 年机器学习和深度学习的论文创意!

“机器学习的美妙之处在于&#xff0c;它可以应用于你想要解决的任何问题&#xff0c;只要你能为计算机提供足够的例子。” 一、说明 该文章列出了 20 年机器学习和深度学习本科课程的 2023 个潜在论文想法。每个论文的想法都包括一个介绍&#xff0c;简要概述了主题和研究目标…

Elasticsearch 对比传统数据库:深入挖掘 Elasticsearch 的优势

当你为项目选择数据库或搜索引擎时&#xff0c;了解每个选项的细微差别至关重要。 今天&#xff0c;我们将深入探讨 Elasticsearch 的优势&#xff0c;并探讨它与传统 SQL 和 NoSQL 数据库的比较。 1. Elasticsearch简介 Elasticsearch 以强大的 Apache Lucene 库为基础&#…

安装Ubuntu系统,将U盘当作启动盘后写保护怎么恢复?

下载ChipGenius 插入写保护的U盘&#xff0c;打开ChipGenius.exe后可以扫描到U盘&#xff0c;如下图中的E:盘就是我插入的U盘&#xff08;我的PC上只有C、D两个分区&#xff09;&#xff1b; ChipGenius的作用 下载ChipGenius是为了获取U盘的设备信息&#xff1a;重点是主控…

Paddle训练COCO-stuff数据集学习记录

COCO-stuff数据集 COCO-Stuff数据集对COCO数据集中全部164K图片做了像素级的标注。 80 thing classes, 91 stuff classes and 1 class ‘unlabeled’ 数据集下载 wget --directory-prefixdownloads http://images.cocodataset.org/zips/train2017.zip wget --directory-prefi…

stable diffusion实践操作-复制-清空-保存提示词

系列文章目录 stable diffusion实践操作 stable diffusion实践操作-webUI教程 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、右上生成图标附近按钮介绍1. 箭头介绍&#xff08;复现别人的…

博客程序系统其它功能扩充

一、注册功能 1、约定前后端接口 2、后端代码编写 WebServlet("/register") public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置…

《凤凰架构》第三章——事务处理

前言 由于一些地方原文感觉不太清楚&#xff0c;有些地方用小林coding的文章代替。 总结 事务处理主要的目的就是要让数据在各种条件下&#xff0c;最终的运行结果都能符合你的期望。要达成这个目标有三点需要满足&#xff1a;原子性&#xff08;业务要么同时成功&#xff0…

RT-Thread 原子操作

原子操作简介 原子操作&#xff08;Atomic operation&#xff09;是指一种不可分割的操作&#xff0c;要么完全执行成功&#xff0c;要么完全不执行。 原子操作的执行过程中不允许有任何中断&#xff0c;如果出现了中断&#xff0c;那么操作的结果就无法保证。 原子操作通常…

【Linux】多路IO转接问题-select

select&#xff1a; 首先设置一个lfd绑定服务端地址结构&#xff0c;用于监听新的连接。select函数调用&#xff0c;用于对整个fd数组进行监听&#xff0c;该数组最大限制1024&#xff0c;通过遍历&#xff0c;来确定是哪个fd有变化&#xff1a; 1.如果是lfd&#xff1a;那么可…

PriorityQueue介绍

PriorityQueue堆的应用找前k个最小数据&#xff08;TOPK问题&#xff09;求k个最小的数优化堆排序 PriorityQueue Java集合框架中提供了PriorityQueue和PriorityBlockingQueue&#xff08;优先级阻塞队列&#xff09;两种类型的优先级队列&#xff0c;PriorityQueue是线程不安…

IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例

如果说COM和DLL让程序间交互数据变得方便&#xff0c;那CGI这门简单而又古老的技术让网络上数据交互变得方便。虽然古老&#xff0c;但浩瀚的互联网上和世界各地的企业内部&#xff0c;仍有许许多多并发访问量不大的业务在使用这门技术。今天做个回顾&#xff0c;并列出一些例子…

完全平方数

题目链接 完全平方数 题目描述 注意点 返回 和为 n 的完全平方数的最少数量 解答思路 初始想到使用动态规划&#xff0c;后续数字的完全平方数可以由前面数字的完全平方数求得&#xff0c;对于任意数字&#xff0c;可以计算其减去从1…i之间&#xff08;保证做减操作后的值…

Unity中Shader的面剔除Cull

文章目录 前言一、Unity中Shader的面是否剔除&#xff0c;是由我们自己决定的二、暴露一个属性来控制 剔除模式三、如何区分正反面 前言 Unity中Shader的面剔除 Cull Off | Back | Front 一、Unity中Shader的面是否剔除&#xff0c;是由我们自己决定的 使用 Cull Off | Back |…

深度学习之视频分类项目小记

写在前面&#xff0c;最近一阵在做视频分类相关的工作&#xff0c;趁有时间来记录一下。本文更注重项目实战与落地&#xff0c;而非重点探讨多模/视频模型结构的魔改 零、背景 目标&#xff1a;通过多模态内容理解技术&#xff0c;构建视频层级分类体系原技术方案&#xff1a…

Pyecharts数据可视化(二)

目录 1.绘制散点图 2.绘制饼图 2.1绘制实心饼图 2.2 绘制圆形饼图 2.3 绘制玫瑰图 3.绘制漏斗图 4.绘制仪表盘 5.绘制组合图表 本文主要介绍如何利用Pyecharts来绘制一些常用的可视化图形&#xff0c;比如散点图、饼图、漏斗图等等&#xff0c;具体的绘制方法请见下文。 …

通讯软件014——分分钟学会Matrikon HDA Explorer

本文介绍如何使用Matrikon HDA Explorer工具软件进行OPC HDA通讯调试。相关软件可登录网信智汇&#xff08;wangxinzhihui.com&#xff09;下载。 1、连接OPC HDA Server数据源“Kepware.KEPServerEX HAD.V6”。 2、添加标签&#xff1a;右键点击“Kepware.KEPServerEX HAD.V6”…

[管理与领导-66]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 乌卡时代(VUCA )的团队管理思维方式的转变

目录 一、乌卡时代人与公司的关系的转变 二、乌卡时代管理方式的转变 三、乌卡时代的管理与传统时代的管理比较 四、乌卡时代管理者的挑战 五、乌卡时代如何做好管理 六、个人能力要求 一、乌卡时代人与公司的关系的转变 在乌卡时代&#xff08;指虚拟办公、远程工作等数…