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

这篇具有很好参考价值的文章主要介绍了【LeetCode75】第四十五题 重新规划路线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

题目:

示例:

分析:

代码:


题目:

【LeetCode75】第四十五题 重新规划路线,LeetCode75题解,leetcode,算法,c++,数据结构,深度优先

示例:

【LeetCode75】第四十五题 重新规划路线,LeetCode75题解,leetcode,算法,c++,数据结构,深度优先

分析:

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

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

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

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

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

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

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

遍历时我们看一下方向,如果方向是正确的,也就是向着0号城市的我们就不管,反之操作次数+1。接着再以此城市开始新一轮的DFS,直到遍历结束,我们将操作次数返回即可。文章来源地址https://www.toymoban.com/news/detail-693836.html

代码:

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;
    }
};

到了这里,关于【LeetCode75】第四十五题 重新规划路线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 75 第五题(345)反转字符串中的元音字母

    给一个字符串,将里面的元音字母反转,并且保持非元音字母不变(包括顺序). 字符串反转类型的题,我们都可以使用双指针来解决:定义首尾指针,分别向中间靠拢,直到首尾指针都指向了元音字母,然后交换首尾指针所指的字母,如此不会影响到非元音字母,同时也将元音字母反转了

    2024年02月16日
    浏览(45)
  • 【从零开始学习JAVA | 第四十五篇】反射

    目录 前言: ​反射:  使用反射的步骤: 1.获取阶段: 2.使用阶段: 反射的应用场景: 使用反射的优缺点: 总结: Java中的反射是一项强大而灵活的功能,它允许程序在运行时 动态地获取、操作和利用类的信息 。通过反射,我们可以在运行时检查和修改类的属性、调用类

    2024年02月13日
    浏览(40)
  • 第四十一天 Java基础学习(三十五)

    一、JSP内置对象 ●内置对象 因为SP的本质是Servlet,在JSP文件经过转译之后,生成JAVA代码,在运行时JSP给我们准备好了九个可以直接使用而不用我们自己去new的对象,这九个对象我之为内置对象. 内置对象完全由SP自行去维护,我们直接使用即可。 ●九大内置对象 confia ;page ;

    2024年02月16日
    浏览(29)
  • 第四十五章 Unity 滚动视图 (Scroll View) UI

    我们介绍一下滚动条 (Scrollbar),它允许用户滚动由于太大而无法完全看到的图像或其他视图。这种效果在我们网页中经常看到,尤其是网页内容太长的时候,就会在垂直方向出现滚动条。当然,有时候也会在水平方向出现滚动条。我们拖动滚动条就能看到剩余的内容。通常情

    2024年02月05日
    浏览(21)
  • 【leetcode100-086到090】【动态规划】一维五题合集2

    【单词拆分】 给你一个字符串  s  和一个字符串列表  wordDict  作为字典。如果可以利用字典中出现的一个或多个单词拼接出  s  则返回  true 。 注意: 不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 思路: 首先,我们依次考虑s的前i个字母能否被

    2024年02月19日
    浏览(27)
  • 第四十六章 动态规划——状态机模型

    其实状态机DP只是听起来高级,其实我们之前做的所有关于DP的题几乎都算是状态机,为什么呢? 大家继续向下看: DP解决的是多决策的问题,那么我们可以把01背包问题画成下面的图: 按照正常的逻辑,我们一般都是从第一个物品开始看,决定选或者不选,然后再去看第二

    2024年02月16日
    浏览(34)
  • 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    STM32本身没有自带EEPROM,但是STM32具有IAP(在应用编程)功能,所以我们可以把它的FLASH当成EEPROM来使用。本章,我们将利用STM32内部的FLASH来实现第三十六章实验类似的效果,不过这次我们是将数据直接存放在STM32内部,而不是存放在NOR FLASH。 本章分为如下几个小节: 45.1 ST

    2024年02月08日
    浏览(47)
  • 「SQL面试题库」 No_75 重新格式化部门表

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月06日
    浏览(33)
  • 四十五、时间/空间复杂度分析

    (1)看循环 一层循环为O(N),两层循环为O(n^2) 不包含输入输出所必须的循环 若两个循环,不互相嵌套,分别为m与n,则为O(m+n) (2)看递归 主定理,不适用太麻烦 例如快排与归并排序: 一共logn层,每一层是O(N)的时间复杂度,则总复杂度为O(nlogn) (3)一些看似为O(n^2),但实

    2024年02月13日
    浏览(68)
  • web学习笔记(四十五)Node.js

    目录 1. Node.js 1.1 什么是Node.js 1.2 为什么要学node.js 1.3  node.js的使用场景 1.4 Node.js 环境的安装 1.5 如何查看自己安装的node.js的版本 1.6 常用终端命令 2. fs 文件系统模块 2.1引入fs核心模块 2.2 读取指定文件的内容 2.3  向文件写入指定内容 2.4 创建文件夹  2.5 判断文件夹是否存

    2024年04月16日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包