Leetcode 1129. 颜色交替的最短路径

news/2024/10/19 10:14:56

1.题目基本信息

1.1.题目描述

给定一个整数 n,即有向图中的节点数,其中节点标记为 0 到 n – 1。图中的每条边为红色或者蓝色,并且可能存在自环或平行边。

给定两个数组 redEdges 和 blueEdges,其中:

  • redEdges[i] = [a_i, b_i] 表示图中存在一条从节点 a_i 到节点 b_i 的红色有向边,
  • blueEdges[j] = [u_j, v_j] 表示图中存在一条从节点 u_j 到节点 v_j 的蓝色有向边。

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

1.2.题目地址

https://leetcode.cn/problems/shortest-path-with-alternating-colors/description/

2.解题方法

2.1.解题思路

广度优先搜索

2.2.解题步骤

第一步,构建图邻接表。标记红色的边为0,蓝色的边为1。图结构:{起始点:[(目的点,边的颜色标识),…],…}

第二步,BFS遍历。对于子节点加入队列的条件中加上父节点和子节点的颜色标识之和为1,这样就能保证路径的颜色交替条件。同时在过程中记录递归层数,即为步数,记录到result数组中。

3.解题代码

Python代码

from collections import dequeclass Solution:def shortestAlternatingPaths(self, n: int, redEdges: List[List[int]], blueEdges: List[List[int]]) -> List[int]:# BFS# 第一步,构建图邻接表。标记红色的边为0,蓝色的边为1。图结构:{起始点:[(目的点,边的颜色标识),...],...}graph=[[] for _ in range(n)]for edge in redEdges:graph[edge[0]].append((edge[1],0))for edge in blueEdges:graph[edge[0]].append((edge[1],1))# 第二步,BFS遍历。对于子节点加入队列的条件中加上父节点和子节点的颜色标识之和为1,这样就能保证路径的颜色交替条件。同时在过程中记录递归层数,即为步数,记录到result数组中。que=deque([(0,0,0),(0,1,0)])visited=set([(0,0),(0,1)])result=[-1]*nwhile que:curLength=len(que)for i in range(curLength):node,color,steps=que.popleft()result[node]=steps if result[node]==-1 else min(steps,result[node])for subNode,subColor in graph[node]:if (subNode,subColor) not in visited and subColor+color==1:visited.add((subNode,subColor))que.append((subNode,subColor,steps+1))# print(result)return result

4.执行结果

在这里插入图片描述

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

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

相关文章

Linux系统命令3

1、df 查看磁盘使用情况Filesystem:代表该文件系统时哪个分区,所以列出的是设备名称。 1K-blocks:说明下面的数字单位是1KB,可利用-h或-m来改变单位大小,也可以用-B来设置。 Used:已经使用的空间大小。Available:剩余的空间大小。 Use%:磁盘使用率。如果使用率在90%以上…

线性表学习1

线性结构 若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且除了首尾节点外所有结点都最多只有一个直接前趋和一个直接后继。 可表示为:(a1,a2,a3,...) 特点:只有一个首结点和尾结点 本质特征:除首尾结点外,其他结点只有一个直接前驱和一个直 接后继。 简言…

学习 gradle 基础

简介 Gradle 的优势一款最新的,功能最强大的构建工具,用它逼格更高 使用 Groovy 或者 Kotlin 代替 XML,使用程序代替传统的 XML 配置,项目构建更灵活 丰富的第三方插件,让你随心所欲使用 完善 Android,Java 开发技术体系下载和安装 官网地址 https://services.gradle.org…

AutoResetEvent双向信号(生产者和消费者)例子

AutoResetEvent是一个非常有用的线程同步机制,尤其是在处理生产者和消费者问题的时候,尤其适用。本随笔记录下生产者和消费者一对一问题的两种写法并进行代码执行逻辑的分析,来加深对AutoResetEvent的理解。 写法一:internal class Program {public static AutoResetEvent …

数据采集和融合技术作业1

作业① 1)用requests和BeautifulSoup库方法定向爬取给定网址的数据,屏幕打印爬取的大学排名信息。 a、主要代码解析 该函数从获取的JSON数据中提取前 num 名大学的信息,并将这些信息存储到 ulist 列表中,同时格式化输出这些大学的排名信息 def printUnivList(ulist, html, …

沃顿商学院商业人工智能笔记-六-

沃顿商学院商业人工智能笔记(六) P46:12_简介.zh_en - GPT中英字幕课程资源 - BV1Ju4y157dK 嗨,我是迈克尔罗伯茨。我是威廉H罗伯茨教授。 我是宾夕法尼亚大学沃顿商学院的金融学劳伦斯教授。 在这一系列视频中,我们将讨论金融、机器学习。以及人工智能。因此,当我想到金…

沃顿商学院商业人工智能笔记-九-

沃顿商学院商业人工智能笔记(九) P82:19_更广泛的隐私和伦理问题.zh_en - GPT中英字幕课程资源 - BV1Ju4y157dK 所以让我们讨论一下关于使用数据科学和人工智能的一些更广泛的问题。一般来说,在工作场所管理人际关系。这些是伦理问题,也是隐私问题。 所以让我们谈谈这些问…

沃顿商学院商业人工智能笔记-三-

沃顿商学院商业人工智能笔记(三) P123:22_AI的风险.zh_en - GPT中英字幕课程资源 - BV1Ju4y157dK 在这次讲座中,我们将讨论AI的一些风险。我将以一个简单的统计风险开始,它有重要的管理意义。 然后我会谈论社会和伦理风险。 所以我想讨论的第一个风险是过拟合风险。 现在,…