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

129. 颜色交替的最短路径

时间:2023-04-06 22:23:55浏览次数:49  
标签:dist 路径 next 交替 vector push answer 129

题目链接:129. 颜色交替的最短路径

方法:BFS

解题思路

  • 当边的权重为 \(1\) 时,可以使用 \(BFS\) 计算最短路径;
  • 因为起始边有两种情况,所以都需要计算,最后取两者的最小值;

代码

class Solution {
public:
    vector<int> shortestAlternatingPaths(int n, vector<vector<int>>& redEdges, vector<vector<int>>& blueEdges) {
        // 初始化两种颜色的邻接链表
        vector<vector<vector<int>>> next(2, vector<vector<int>>(n));
        for (auto &e : redEdges) next[0][e[0]].push_back(e[1]); // 红色邻接链表——0
        for (auto &e : blueEdges) next[1][e[0]].push_back(e[1]); // 蓝色邻接链表——1

        // 从红色/蓝色边出发两种情况的最短路径距离
        vector<vector<int>> dist(2, vector<int>(n, INT_MAX));

        // 边的权重为1时,BFS最先搜索到的即为最短路径
        queue<pair<int, int>> q; // 其中pair<a, b>,a表示节点,b表示颜色
        dist[0][0] = 0;  // 初始化dist数组
        dist[1][0] = 0;
        q.push({0, 0});
        q.push({0, 1});
        while (!q.empty()) {
            auto [x, t] =  q.front();
            q.pop();
            for (auto y : next[1 - t][x]) {
                if (dist[1 - t][y] != INT_MAX) continue;
                dist[1 - t][y] = dist[t][x] + 1;
                q.push({y, 1 - t});
            }
        }

        // 计算两种情况中的最短路径距离
        vector<int> answer(n);
        for (int i = 0; i < n; i ++ ) {
            answer[i] = min(dist[0][i], dist[1][i]);
            if (answer[i] == INT_MAX) answer[i] = -1;
        }

        return answer;        
    }
};

标签:dist,路径,next,交替,vector,push,answer,129
From: https://www.cnblogs.com/lxycoding/p/17294441.html

相关文章

  • 蚁群算法 Dijkstra算法 遗传算法 人工势场法实现二维 三维空间路径规划
    【改进蚁群算法】蚁群算法Dijkstra算法遗传算法人工势场法实现二维三维空间路径规划本程序为改进蚁群算法+Dijkstra算法+MAKLINK图理论实现的二维空间路径规划算法实现:1)基于MAKLINK图理论生成地图,并对可行点进行划分;2)用Dijkstra算法实现次优路径的寻找;3)在Dijkstra算法......
  • c# 获取当前文件路径
    Winform获取应用程序的当前路径的方法集合,具体如下://获取当前进程的完整路径,包含文件名(进程名)。stringstr=this.GetType().Assembly.Location;result:X:\xxx\xxx\xxx.exe(.exe文件所在的目录+.exe文件名)//获取新的Process组件并将其与当前活动的进程关联的主......
  • 257. 二叉树的所有路径
    给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。classSolution{private:voidtraversal(TreeNode*cur,stringpath,vector<string>&res){path+=std::to_string(cur->val);if(cur->left==nullptr&......
  • C#获取当前程序运行路径的几种方法
    从外部程序启动另一个程序,路径有点不一样;logger.InfoFormat($"{System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName},{System.Environment.CurrentDirectory},{System.IO.Directory.GetCurrentDirectory()}"+$",{System.AppDomain......
  • java中如何创建带路径的文件
    请教各位大侠了,java中如何创建带路径的文件,说明下这个路径不存在------回答---------------其他回答(2分)---------JavacodeFilef=newFile("c:/1.txt");if(!f.exists()){try{f.createNewFile();}catch(IOExceptione){e.printStackTrace();}}------其他回答(18分)----......
  • Vulnhub之Monkeybox详细测试过程(不同的Shell获取路径)
    Monkeybox识别目标主机IP地址─(kali㉿kali)-[~/Desktop/Vulnhub/Monkeybox]└─$sudonetdiscover-ieth1-r192.168.56.0/24Currentlyscanning:Finished!|ScreenView:UniqueHosts......
  • ThinkPHP 3.2 路径问题
    一、阿帕奇域名已经开始访问的时候:(去掉index.php)访问路径:http://wechatu.xd107.com/Pay/Index/payToJS路径代码:var$URL="__ROOT__/Pay/Index/";二、阿帕奇域名没开启:(没有掉index.php)访问路径:http://soft.amaitech.com/index.php?s=/Home/Login/index.htmlJS路径代码......
  • 基于PSO的最优路径优化仿真,带GUI界面,可以设置粒子数目,迭代次数,优化目标,输出最优
    1.算法描述PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空......
  • 基于PSO的最优路径优化仿真,带GUI界面,可以设置粒子数目,迭代次数,优化目标,输出最优
    1.算法描述        PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前......
  • 2023-04-04 哈密尔顿问题和路径压缩
    哈密尔顿问题和路径压缩1哈密尔顿回路和TSP路径与回路哈密尔顿问题偏计算机,欧拉问题偏数学,所以本章我们主要讲哈密尔顿回路和哈密尔顿路径哈密尔顿回路哈密尔顿路径欧拉回路欧拉路径哈密尔顿回路定义从一个点出发,沿着边走,经过每个顶点恰好一次,之后再回到出发点,过程......