LeetCode 1129. 颜色交替的最短路径(BFS)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

在一个有向图中,节点分别标记为 0, 1, ..., n-1
这个图中的每条边不是红色就是蓝色,且存在自环或平行边。

red_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的红色有向边
类似地,blue_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的蓝色有向边

返回长度为 n 的数组 answer,其中 answer[X] 是从节点 0 到节点 X 的红色边和蓝色边交替出现最短路径的长度。
如果不存在这样的路径,那么 answer[x] = -1。

示例 1:
输入:n = 3, red_edges = [[0,1],[1,2]], blue_edges = []
输出:[0,1,-1]示例 2:
输入:n = 3, red_edges = [[0,1]], blue_edges = [[2,1]]
输出:[0,1,-1]示例 3:
输入:n = 3, red_edges = [[1,0]], blue_edges = [[2,1]]
输出:[0,-1,-1]示例 4:
输入:n = 3, red_edges = [[0,1]], blue_edges = [[1,2]]
输出:[0,1,2]示例 5:
输入:n = 3, red_edges = [[0,1],[0,2]], blue_edges = [[1,0]]
输出:[0,1,1]提示:
1 <= n <= 100
red_edges.length <= 400
blue_edges.length <= 400
red_edges[i].length == blue_edges[i].length == 2
0 <= red_edges[i][j], blue_edges[i][j] < n

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-path-with-alternating-colors
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 分两种情况从 0 出发,红色,或者蓝色
  • 每个点的访问标记 vis 有 2 个状态(红的访问没?蓝的访问没?)
class Solution {
public:vector<int> shortestAlternatingPaths(int n, vector<vector<int>>& red_edges, vector<vector<int>>& blue_edges) {vector<vector<int>> dis(2, vector<int>(n, INT_MAX));vector<vector<int>> r(n), b(n);for(auto& e : red_edges)r[e[0]].push_back(e[1]);for(auto& e : blue_edges)b[e[0]].push_back(e[1]);//建图bfs(r,b,0,dis);//出发,case1bfs(r,b,1,dis);//出发,case2vector<int> ans(n,-1);for(int i = 0; i < n; ++i){ans[i] = min(dis[0][i], dis[1][i]);if(ans[i] == INT_MAX)ans[i] = -1;}return ans;}void bfs(vector<vector<int>>& r, vector<vector<int>>& b, int flag, vector<vector<int>>& dis){int n = r.size(), cur, size, step = 0;vector<vector<bool>> vis(2, vector<bool>(n, false));//访问标记queue<int> q;q.push(0);vis[flag][0] = true;while(!q.empty()){size = q.size();while(size--){cur = q.front();dis[flag][cur] = min(dis[flag][cur], step);//取最小的路径q.pop();if(flag)//走红色的{for(auto nt : r[cur]){if(vis[flag][nt])//访问过了,不能再次访问continue;vis[flag][nt] = true;q.push(nt);}}else//走蓝色的{for(auto nt : b[cur]){if(vis[flag][nt])continue;vis[flag][nt] = true;q.push(nt);}}}step++;//步数+1flag = !flag;//换地图颜色}}
};

36 ms 13.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

web.config文件之自定义错误节

web.config文件之自定义错误节 大家都知道&#xff0c;在开发asp.net应用程序时&#xff0c;通过web.config文件可以配置在执行 Web 请求期间发生未处理的错误时&#xff0c;ASP.NET 显示信息的方式。下面是一个典型的基本配置&#xff1a; ?<system.web><customErro…

R语言第八讲 评估模型之交叉验证法分析案例

题目 评估Auto数据集上拟合多个线性模型所产生的测试错误率。Auto数据集是存在与ISLR程序包中的一个摩托车相关数据的数据集&#xff0c;读者可自行下载ISLR程序包&#xff0c;并将Auto数据集加载。 相关资料 交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验…

linux中UDP程序流程、客户端、服务端

UDP--- 用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;是一个无连接的简单的面向数据报的运输层协议。 优点&#xff1a;传输速度快 缺点&#xff1a;不可靠 socket的中文意思是接插件&#xff1a; 创建socket 在 Python 中 使用socket 模块的类 …

LeetCode 1041. 困于环中的机器人

文章目录1. 题目2. 解题1. 题目 在无限的平面上&#xff0c;机器人最初位于 (0, 0) 处&#xff0c;面朝北方。机器人可以接受下列三条指令之一&#xff1a; “G”&#xff1a;直走 1 个单位“L”&#xff1a;左转 90 度“R”&#xff1a;右转 90 度 机器人按顺序执行指令 ins…

Javascript实现合并单元格

Web上的报表或表格应用&#xff0c;较为复杂的表格操作一般都比较难实现&#xff0c;这里介绍一下用ComponentOne Studio for ASP.NET Wijmo中的SpreadJS&#xff0c;可以实现一些较为复杂的表格操作&#xff0c;个人认为他模仿桌面应用的操作体验非常不错&#xff0c;虽然我并…

R语言第八讲续 评估模型之自助法分析案例

题目 今天来用自助法评估一下ISLR 程序包中的 Portfolio (金融资产)数据集的预测函数 相关资料 自助法&#xff08;Bootstraping&#xff09;是另一种模型验证&#xff08;评估&#xff09;的方法&#xff08;之前已经介绍过单次验证和交叉验证&#xff09;。其以自助采样&…

python中常见的15中面试题

下面这些问题涉及了与Python相关的许多技能&#xff0c;问题的关注点主要是语言本身&#xff0c;不是某个特定的包或模块。每一个问题都可以扩充为一个教程&#xff0c;如果可能的话。某些问题甚至会涉及多个领域。 我之前还没有出过和这些题目一样难的面试题&#xff0c;如果你…

LeetCode 1039. 多边形三角剖分的最低得分(区间DP)

文章目录1. 题目2. 解题1. 题目 给定 N&#xff0c;想象一个凸 N 边多边形&#xff0c;其顶点按顺时针顺序依次标记为 A[0], A[i], ..., A[N-1]。 假设您将多边形剖分为 N-2 个三角形。 对于每个三角形&#xff0c;该三角形的值是顶点标记的乘积&#xff0c;三角剖分的分数是…

CentOS6.4安装包初识

LiveCD 一般用来修复系统使用&#xff0c;有容量很小&#xff0c;不用安装&#xff0c;可以自启动等特性。bin DVD也具有同 样的功能&#xff0c;但是体积较大&#xff0c;所以会有live DVD。   LiveDVD 与LiveCD 相同是不需要安装就直接使用的&#xff0c;要安装的话还是要安…

R语言第九讲 验证集法

目的 为了更好的熟悉分析定性变量的逻辑斯谛回归分析的应用和验证集法(评估拟合拟合模型的一种方法&#xff09;&#xff0c;用一个简单的示例来介绍一下它们在分析数据中的应用。 题目 在 Default 数据集上用income 和 balance 做逻辑斯谛回归来预测 default的概率。现…

总结python中基本的面试题

1.Python是如何进行内存管理的&#xff1f; 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一、对象的引用计数机制 Python内部使用引用计数&#xff0c;来保持追踪内存中的对象&#xff0c;所有对象都有引用计数。 引用计数增加的情况&#xff1a; 1&a…

02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面

文章目录1. 训练&#xff0c;验证&#xff0c;测试集2. 偏差&#xff0c;方差3. 机器学习基础4. 正则化5. 为什么正则化预防过拟合6. dropout&#xff08;随机失活&#xff09;正则化7. 理解 dropout8. 其他正则化9. 归一化输入10. 梯度消失 / 梯度爆炸11. 神经网络权重初始化1…

动态规划 POJ 1088 滑雪

Description Michael 喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个 区域中最长底滑坡。区域由一个二维数组…

R语言第十讲 逻辑斯蒂回归

模型函数介绍 Logistic Regression 虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。 Logistic 回归的本质是&#xff1a;假设数据服从这个Logistic 分布&#xff0c;然后使用极…

网络上总结python中的面试题

【题目:001】| 说说你对zen of python的理解&#xff0c;你有什么办法看到它? Python之禅,Python秉承一种独特的简洁和可读行高的语法&#xff0c;以及高度一致的编程模式&#xff0c;符合“大脑思维习惯”&#xff0c;使Python易于学习、理解和记忆。Python同时采用了一条极简…

阿里云 超级码力在线编程大赛初赛 第3场 题目4. 完美字符串

文章目录1. 题目2. 解题1. 题目 描述 定义若一个字符串的每个字符均为’1’&#xff0c;则该字符串称为完美字符串。 给定一个只由’0’和’1’组成的字符串s和一个整数k。 你可以对字符串进行任意次以下操作 选择字符串的一个区间长度不超过k的区间[l, r]&#xff0c;将区间…

(译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机

Windows Azure的7月更新:SQL数据库&#xff0c;流量管理&#xff0c;自动缩放&#xff0c;虚拟机 今早我们释出一些很棒的Windows Azure更新。这些新的提升包括&#xff1a;SQL数据库&#xff1a;支持SQL自动导出和一个新的高级层SQL数据库选项流量管理&#xff1a;在HTML门户的…

R语言第十一讲 决策树与随机森林

概念 决策树主要有树的回归和分类方法&#xff0c;这些方法主要根据分层和分割 的方式将预测变量空间划分为一系列简单区域。对某个给定待预测的观 测值&#xff0c;用它所属区域中训练集的平均值或众数对其进行预测。 基于树的方法简便且易于解释。但预测准确性通常较低。如图…

python面试题汇总(1)

1. (1)python下多线程的限制以及多进程中传递参数的方式   python多线程有个全局解释器锁&#xff08;global interpreter lock&#xff09;&#xff0c;这个锁的意思是任一时间只能有一个线程使用解释器&#xff0c;跟单cpu跑多个程序一个意思&#xff0c;大家都是轮着用的&…

阿里云 超级码力在线编程大赛初赛 第3场 题目1. 最大公倍数

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/15179470890799741/85251759933690467 2. 解题 看的大佬的解题&#xff0c;很强&#xff01; class Solution { public:/*** param a: Left margin* param b: Right margin* return: return t…