LeetCode 2065. Maximum Path Quality of a Graph(最大化一张图中的路径价值)
问题描述
思路与代码
本体参考官方题解,通过深度优先搜索解决:
LeetCode 2065 官方题解
注意两件事情:
- 当重复到达某一节点时,不能重复获取价值;
- 若起点为孤立点,直接返回。
代码如下:
class Solution:def maximalPathQuality(self, values: List[int], edges: List[List[int]], maxTime: int) -> int:# node to (node, time) list dictionarydict_node_edge = {}for i, j, t in edges:if i not in dict_node_edge.keys():dict_node_edge[i] = [(j, t)]else:dict_node_edge[i].append((j, t))if j not in dict_node_edge.keys():dict_node_edge[j] = [(i, t)]else:dict_node_edge[j].append((i, t))set_node_visit = {0}ans = 0def dfs(node: int, time: int, value: int) -> None:nonlocal ansif node == 0:ans = max(ans, value)if node not in dict_node_edge.keys():returnfor node_next, time_cost in dict_node_edge[node]:if time + time_cost <= maxTime:if node_next not in set_node_visit:set_node_visit.add(node_next)dfs(node=node_next, time=time + time_cost, value=value + values[node_next])set_node_visit.remove(node_next)else:dfs(node=node_next, time=time + time_cost, value=value)dfs(node=0, time=0, value=values[0])return ans
其中,若 dict_node_edge 字典使用 defaultdict 类型,则可以利用其特性,不必对起点为孤立点的情况进行特殊处理,如官方题解所示:
class Solution:def maximalPathQuality(self, values: List[int], edges: List[List[int]], maxTime: int) -> int:g = defaultdict(list)for x, y, z in edges:g[x].append((y, z))g[y].append((x, z))visited = {0}ans = 0def dfs(u: int, time: int, value: int) -> None:if u == 0:nonlocal ansans = max(ans, value)for v, dist in g[u]:if time + dist <= maxTime:if v not in visited:visited.add(v)dfs(v, time + dist, value + values[v])visited.discard(v)else:dfs(v, time + dist, value)dfs(0, 0, values[0])return ans
但依笔者平时的代码习惯,通常会避免 defaultdict 产生意想不到的 key 的副作用,因此不使用该类型。
笔者代码的运行效果如下:
引申思考
本题的思路,也可用于解决网格地图的路径问题,即各网格点到达的成本或收益各不相同的情况,此时无法通过原始 A* 算法解决,只能使用本题方法进行搜索。但该问题本质上搜索空间过大,很难完成较大区域内的最优寻路。
LeetCode 2065. Maximum Path Quality of a Graph(最大化一张图中的路径价值)相关推荐
- LeetCode 2065. 最大化一张图中的路径价值
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给你一张无向图,图中有 ...
- LeetCode 2065. 最大化一张图中的路径价值(DFS)
文章目录 1. 题目 2. 解题 1. 题目 给你一张 无向 图,图中有 n 个节点,节点编号从 0 到 n - 1 (都包括). 同时给你一个下标从 0 开始的整数数组 values ,其中 val ...
- R语言ggplot2可视化、在一张图中画出两条曲线(two lines in same ggplot2 graph)、使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中
R语言ggplot2可视化.在一张图中画出两条曲线(two lines in same ggplot2 graph).使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中 目录
- leetcode 1293. Shortest Path in a Grid with Obstacles Elimination | 1293. 网格中的最短路径(BFS)
题目 https://leetcode.com/problems/shortest-path-in-a-grid-with-obstacles-elimination/ 题解 DFS 递归超时,看了评 ...
- leetcode 421. Maximum XOR of Two Numbers in an Array | 421. 数组中两个数的最大异或值(位运算,Trie前缀树)
题目 https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/ 题解 自己没有思路,看了答案之后自己写的. 参考:Py ...
- Leetcode | Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...
- [Leetcode] Binary Tree Maximum Path Sum
这是LeetCode上的一道题目,需要求二叉树中两点路径的最大和.原题是 https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ ...
- leetcode @python 124. Binary Tree Maximum Path Sum
题目链接 https://leetcode.com/problems/binary-tree-maximum-path-sum/ 题目原文 Given a binary tree, find the ...
- 【重点】LeetCode 124. Binary Tree Maximum Path Sum
LeetCode 124. Binary Tree Maximum Path Sum 参考链接:http://zxi.mytechroad.com/blog/tree/leetcode-124-bin ...
最新文章
- 《Linux设备驱动开发详解 A》一一2.3 接口与总线
- linux端口访问规则,linux 查看开发放端口号--iptables
- 恍然小悟,去掉Excel的worksheet(工作表)保护的新方法
- 20 best jquery 截图
- C#生成安装文件后自动附加数据库的思路跟算法
- 计算机网络学习笔记-目录(更新日期:2020.4.8)
- 聊天室显示在线人数和已上线人数
- C#中Socket用法,多个聊天和单一聊天。
- 下载百度网盘资源不限速的两种方法
- fms安装教程 linux_安装FMS3 for Linux
- 解决xshell SSH 连接远程ubuntu make menuconfig 退格键无法删除问题
- 百度测试开发岗面试题(2019秋招)
- ArcGIS栅格数据四参数七参数投影变换
- 什么是“好”系统呢?
- MC0108白给-MC0109新河妇荡杯
- 电脑端epub阅读软件分享
- 基2-booth乘法器原理及verilog代码
- Unity SWS自动寻路插件
- 开源软件和商业软件版本的介绍:alpha、beta、rc、GA等等
- c语言课程设计 水电费,广东工业大学水电费系统C语言设计(文件操作部分)
热门文章
- javascript basical knowledge
- 软件设计模式——工厂设计模式
- linux syscall参数,SYSCALL: 传递字符串参数的系统调用
- W25QXX使用教程
- 2、Inferred type ‘S‘ for type parameter ‘S‘ is not within its bound; should extend ‘com.yummy.sell.da
- java.sql.SQLException: java.lang.RuntimeException: serious problem
- ABC(智能蜂群算法)优化SVM_源码逐行中文注解
- 2.11 将PSD文档导入当前文档 [Illustrator CC教程]
- 智能电视盒子芯片哪个更强?七大芯片方案性能详解
- 关于Android LiveCD的几点问题