LeetCode 1548. The Most Similar Path in a Graph(动态规划)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

We have n cities and m bi-directional roads where roads[i] = [ai, bi] connects city ai with city bi. Each city has a name consisting of exactly 3 upper-case English letters given in the string array names. Starting at any city x, you can reach any city y where y != x (i.e. the cities and the roads are forming an undirected connected graph).

You will be given a string array targetPath. You should find a path in the graph of the same length and with the minimum edit distance to targetPath.

You need to return the order of the nodes in the path with the minimum edit distance, The path should be of the same length of targetPath and should be valid (i.e. there should be a direct road between ans[i] and ans[i + 1]). If there are multiple answers return any one of them.

The edit distance is defined as follows:
在这里插入图片描述

Follow-up: If each node can be visited only once in the path, What should you change in your solution?

Example 1:
在这里插入图片描述

Input: n = 5, 
roads = [[0,2],[0,3],[1,2],[1,3],[1,4],[2,4]], 
names = ["ATL","PEK","LAX","DXB","HND"], 
targetPath = ["ATL","DXB","HND","LAX"]
Output: [0,2,4,2]
Explanation: [0,2,4,2], [0,3,0,2] and [0,3,1,2] are accepted answers.
[0,2,4,2] is equivalent to ["ATL","LAX","HND","LAX"] which has edit distance = 1 with targetPath.
[0,3,0,2] is equivalent to ["ATL","DXB","ATL","LAX"] which has edit distance = 1 with targetPath.
[0,3,1,2] is equivalent to ["ATL","DXB","PEK","LAX"] which has edit distance = 1 with targetPath.

Example 2:
在这里插入图片描述

Input: n = 4, 
roads = [[1,0],[2,0],[3,0],[2,1],[3,1],[3,2]], 
names = ["ATL","PEK","LAX","DXB"], 
targetPath = ["ABC","DEF","GHI","JKL","MNO","PQR","STU","VWX"]
Output: [0,1,0,1,0,1,0,1]
Explanation: Any path in this graph has edit distance = 8 with targetPath.

Example 3:
在这里插入图片描述

Input: n = 6, 
roads = [[0,1],[1,2],[2,3],[3,4],[4,5]], 
names = ["ATL","PEK","LAX","ATL","DXB","HND"], 
targetPath = ["ATL","DXB","HND","DXB","ATL","LAX","PEK"]
Output: [3,4,5,4,3,2,1]
Explanation: [3,4,5,4,3,2,1] is the only path with edit distance = 0 with targetPath.
It's equivalent to ["ATL","DXB","HND","DXB","ATL","LAX","PEK"]Constraints:
2 <= n <= 100
m == roads.length
n - 1 <= m <= (n * (n - 1) / 2)
0 <= ai, bi <= n - 1
ai != bi 
The graph is guaranteed to be connected and each pair of nodes may have at most one direct road.
names.length == n
names[i].length == 3
names[i] consists of upper-case English letters.
1 <= targetPath.length <= 100
targetPath[i].length == 3
targetPath[i] consists of upper-case English letters.

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

2. 解题

class Solution {
public:vector<int> mostSimilar(int n, vector<vector<int>>& roads, vector<string>& names, vector<string>& targetPath) {vector<vector<int>> g(n);for(auto& r : roads){g[r[0]].push_back(r[1]);g[r[1]].push_back(r[0]);}//建图int len = targetPath.size();vector<vector<int>> dp(len, vector<int>(n, INT_MAX));//走完 ?target后的 在城市 ni 的最小编辑距离vector<vector<int>> path1(n);//n个城市作为结束的最佳路线vector<vector<int>> path2(n);//存储下一个状态的路径for(int i = 0; i < n; ++i)//初始化{dp[0][i] = (names[i] != targetPath[0]);path1[i].push_back(i);}int mindis = INT_MAX, minidx = -1;for(int k = 1;  k < len; ++k){	//样本维度for(int i = 0; i < n; ++i){	//前一个城市if(dp[k-1][i] == INT_MAX)continue;for(int j : g[i]){	//下一个相连的城市if(dp[k][j] > dp[k-1][i]+(names[j]!=targetPath[k])){dp[k][j] = dp[k-1][i]+(names[j]!=targetPath[k]);path2[j] = path1[i];path2[j].push_back(j);}}}swap(path1, path2);//滚动数组,更新当前的最佳路径至path1}for(int i = 0; i < n; i++) {if(mindis > dp[len-1][i]){mindis = dp[len-1][i];minidx = i;}}//取编辑距离最小的城市编号return path1[minidx];//返回路径}
};

1260 ms 109.6 MB


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

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

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

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

相关文章

UAC执行批处理,进行提示

很简单&#xff0c;直接在批处理文件中前面加入下面这段 echo off:: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system…

LeetCode 358. K 距离间隔重排字符串(贪心+优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个非空的字符串 s 和一个整数 k&#xff0c;你要将这个字符串中的字母进行重新排列&#xff0c;使得重排后的字符串中相同字母的位置间隔距离至少为 k。 所有输入的字符串都由小写字母组成&#xff0c;如果找不到距离至少为 k 的重排结果…

LeetCode 1153. 字符串转化(哈希)

文章目录1. 题目2. 解题1. 题目 给出两个长度相同的字符串&#xff0c;分别是 str1 和 str2。请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化后变成字符串 str2。 每一次转化时&#xff0c;将会一次性将 str1 中出现的 所有 相同字母变成其他 任何 小写英文字母&#x…

LeetCode 727. 最小窗口子序列(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定字符串 S and T&#xff0c;找出 S 中最短的&#xff08;连续&#xff09;子串 W &#xff0c;使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符&#xff0c;返回空字符串 “”。 如果有不止一个最短长度的窗口&#x…

GHOSTXP_SP3电脑公司快速安装机版V2013

GHOSTXP_SP3电脑公司快速安装机版V2013下载地址&#xff1a;http://www.xiazaijidi.com/xp/dngs/1.html文件名称:GHOSTXP_SP3电脑公司特别版_V2012_05.iso文件大小:683.74MD5: 6182CC641025BA15AC43689E04ED5961SHA1: D5675FF901CBDCC27FDB9B5DD937DE145FEE8B33CRC32: C5B13EF2…

LeetCode 1035. 不相交的线(最长公共子序列DP)

文章目录1. 题目2. 解题1. 题目 我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。 现在&#xff0c;我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线&#xff0c;只要 A[i] B[j]&#xff0c;且我们绘制的直线不与任何其他连线&#xff08;非水平线&#xff0…

LeetCode MySQL 1549. The Most Recent Orders for Each Product

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | ------------------------ customer_id is the primary key for this table. T…

软件外包平台用例图

简要概括软件外包平台主要的用例以及其用例描述、类图、时序图、 用例图如下&#xff1a; 用例描述如下&#xff1a; “注册”用例描述 标题 说明 用例名称 注册 用例标识号 1 简要说明 使用此平台先进行注册成为用户 前置条件 无 基本事件流 1.判断用户注册的信息…

LeetCode 473. 火柴拼正方形(回溯)

文章目录1. 题目2. 解题1. 题目 还记得童话《卖火柴的小女孩》吗&#xff1f;现在&#xff0c;你知道小女孩有多少根火柴&#xff0c;请找出一种能使用所有火柴拼成一个正方形的方法。 不能折断火柴&#xff0c;可以把火柴连接起来&#xff0c;并且每根火柴都要用到。 输入为…

web基础编程-图片管理网站

图片艺廊管理网站说明 数据库设计&#xff1a; 主要由三张表&#xff1a;用户表、图片表、用户图片对应关系表。 用户表&#xff1a; 主要字段如下&#xff1a; 用户ID 整型 主键 自增长&#xff1b; 用户姓名 字符型 &#xff1b; 用户密码 字符型 &…

HDOJ 1494 跑跑卡丁车

跑跑卡丁车Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1778 Accepted Submission(s): 583Problem Description跑跑卡丁车是时下一款流行的网络休闲游戏&#xff0c;你可以在这虚拟的世界里体验驾驶的乐趣。…

LeetCode 375. 猜数字大小 II(DP)

文章目录1. 题目2. 解题1. 题目 我们正在玩一个猜数游戏&#xff0c;游戏规则如下&#xff1a; 我从 1 到 n 之间选择一个数字&#xff0c;你来猜我选了哪个数字。 每次你猜错了&#xff0c;我都会告诉你&#xff0c;我选的数字比你的大了或者小了。 然而&#xff0c;当你猜…

网络命令使用

实验目的 1&#xff0e;掌握基本的网络命令&#xff0c;并了解其在网络领域的作用。 2&#xff0e;学习使用网络命令&#xff0c;并了解其参数的含义。 实验要求 1&#xff0e;要求不仅能会使用网络命令&#xff0c;并能在实际网络操作中灵活运用。 2&#xff0e;能将基本…

LeetCode 546. 移除盒子(DP)*

文章目录1. 题目2. 解题1. 题目 给出一些不同颜色的盒子&#xff0c;盒子的颜色由数字表示&#xff0c;即不同的数字表示不同的颜色。 你将经过若干轮操作去去掉盒子&#xff0c;直到所有的盒子都去掉为止。 每一轮你可以移除具有相同颜色的连续 k 个盒子&#xff08;k > …

配置VLAN以及配置VTP;

实验目的 配置VLAN; 通过VLAN Trunk配置跨交换机的VLAN; 配置VTP; 查看上述配置项目的有关信息。 设备需求 本实验需要以下设备&#xff1a; Cisco Catalyst 2950系列交换机2台&#xff0c;型号不限; 交叉线序网线1条; 1台带有超级终端程序的PC机&#xff0c;以及Cons…

LeetCode 1140. 石子游戏 II(DP)*

文章目录1. 题目2. 解题1. 题目 亚历克斯和李继续他们的石子游戏。许多堆石子 排成一行&#xff0c;每堆都有正整数颗石子 piles[i]。游戏以谁手中的石子最多来决出胜负。 亚历克斯和李轮流进行&#xff0c;亚历克斯先开始。最初&#xff0c;M 1。 在每个玩家的回合中&…

LeetCode 1550. 存在连续三个奇数的数组

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr&#xff0c;请你判断数组中是否存在连续三个元素都是奇数的情况&#xff1a;如果存在&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;arr [2,6,4,1] 输出&…

配置RIP实验

实验目的 掌握RIPv1和v2配置方法 掌握show ip rip database、sh ip protocol命令 掌握debug命令 掌握将RIP的广播更新方式更改为单播方式 设备需求 本实验需要以下设备&#xff1a; 4台2811Cisco路由器&#xff0c;四台都有两个FastEthernet口。 2条双绞线&#xff0c;…

LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)

文章目录1. 题目2. 解题1. 题目 存在一个长度为 n 的数组 arr &#xff0c;其中 arr[i] (2 * i) 1 &#xff08; 0 < i < n &#xff09;。 一次操作中&#xff0c;你可以选出两个下标&#xff0c;记作 x 和 y &#xff08; 0 < x, y < n &#xff09;并使 arr…

协议数据分析

实验目的 了解协议分析仪的使用方法和基本特点。 增强对网络协议的理解。 实验要求 要求在进行协议数据分析后&#xff0c;能够将网络数据与具体的网络操作相互映证&#xff0c;如实的记录实验结果&#xff0c;完成实验 实验环境 1&#xff0e;一台运行Windows 2000的计算机…