首页 > 其他分享 >Leetcode 1129. 颜色交替的最短路径

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

时间:2024-10-19 10:10:31浏览次数:1  
标签:1129 路径 List 节点 edge que result subColor Leetcode

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 deque

class 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]*n
        while 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.执行结果

在这里插入图片描述

标签:1129,路径,List,节点,edge,que,result,subColor,Leetcode
From: https://www.cnblogs.com/geek0070/p/18475533

相关文章

  • Leetcode 1135. 最低成本连通所有城市
    1.题目基本信息1.1.题目描述想象一下你是个城市基建规划者,地图上有n座城市,它们按以1到n的次序编号。给你整数n和一个数组conections,其中connections[i]=[x_i,y_i,cost_i]表示将城市x_i和城市y_i连接所要的cost_i(连接是双向的)。返回连接所有城市的最低成本,......
  • 【leetcode】 码住—两种办法解决力扣数学思想 “加一” 操作
     前言......
  • LeetCode题练习与总结:最大单词长度乘积--318
    一、题目描述给你一个字符串数组 words ,找出并返回 length(words[i])*length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。示例 1:输入:words=["abcw","baz","foo","bar","xtfn","abcdef"]输出:16解释:这两个单词为"abc......
  • LeetCode题练习与总结:灯泡开关--319
    一、题目描述初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭第二个。第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换第 i 个灯泡的开关。直到第 n 轮,你只需要切换......
  • LeetCode刷题日记之贪心算法(二)
    目录前言买卖股票的最佳时机II跳跃游戏跳跃游戏II总结前言在上一篇贪心算法的学习中,我们探讨了贪心算法的基本思路和逻辑框架。在这篇文章中,我将继续分享几道经典的LeetCode贪心算法题,并探讨其背后的解题思路和技巧。希望通过这些题目的实践,能加深我对贪心算法的理......
  • RRT*路径搜索算法matlab代码
    一、算法简介      RRT*路径搜索算法相比于RRT路径搜索算法多了重选父节点和重布线的过程:二、实现效果对比(比RRT算法更光滑) RRT路径搜索算法实现效果RRT*路径搜索算法实现效果三、代码完整代码私聊!......
  • 【智能算法应用】鸭群算法求解二维路径规划问题
    摘要本文研究了鸭群算法在二维路径规划问题中的应用,旨在解决复杂障碍环境下的最优路径搜索问题。通过模拟鸭群觅食行为,鸭群算法能够有效避开障碍物,找到最短路径。实验结果表明,鸭群算法在路径规划中表现出较快的收敛速度和较优的路径规划效果,适用于多种复杂环境下的路径优化......
  • 【智能算法应用】引力搜索算法求解二维路径规划问题
    摘要引力搜索算法(GSA)是一种基于引力学说的启发式算法,用于解决复杂的优化问题。本文应用GSA于二维路径规划问题,通过优化路径来避开障碍物并达到目标点。实验结果表明,GSA在路径规划中具有良好的表现,尤其在多障碍场景中,其优化路径平滑且避障效果显著。理论引力搜索算法是......
  • 粒子群算法应用——二维栅格路径规划
    粒子群算法详见:粒子群优化算法及应用-CSDN博客目录1栅格地图1.1 什么是栅格地图1.2栅格地图绘制2基本原理3结果展示1栅格地图1.1 什么是栅格地图栅格地图是一种将环境或地图区域均匀划分为一系列大小一致的网格单元,并为每个单元分配特定属性信息的地图表示方法......
  • 关于Python AI 编程助手Fitten Code的应用体验以及Python 修改删除 sys.path 路径以实
    一、关于PythonAI编程助手FittenCode的应用体验        AI现在无孔不入,现在都开始进入到编程中了,有一个能适用多种编译器环境的AI编程插件FittenCode。其适配了ViusalStudio,VSCode(本文使用),JetBrains系列(本文使用)以及Vim等多种编译器环境的插件FittenCo......