问题描述





思路与代码

本体参考官方题解,通过深度优先搜索解决:
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(最大化一张图中的路径价值)相关推荐

  1. LeetCode 2065. 最大化一张图中的路径价值

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一张无向图,图中有 ...

  2. LeetCode 2065. 最大化一张图中的路径价值(DFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你一张 无向 图,图中有 n 个节点,节点编号从 0 到 n - 1 (都包括). 同时给你一个下标从 0 开始的整数数组 values ,其中 val ...

  3. R语言ggplot2可视化、在一张图中画出两条曲线(two lines in same ggplot2 graph)、使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中

    R语言ggplot2可视化.在一张图中画出两条曲线(two lines in same ggplot2 graph).使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中 目录

  4. 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 递归超时,看了评 ...

  5. 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 ...

  6. 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. ...

  7. [Leetcode] Binary Tree Maximum Path Sum

    这是LeetCode上的一道题目,需要求二叉树中两点路径的最大和.原题是 https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ ...

  8. leetcode @python 124. Binary Tree Maximum Path Sum

    题目链接 https://leetcode.com/problems/binary-tree-maximum-path-sum/ 题目原文 Given a binary tree, find the ...

  9. 【重点】LeetCode 124. Binary Tree Maximum Path Sum

    LeetCode 124. Binary Tree Maximum Path Sum 参考链接:http://zxi.mytechroad.com/blog/tree/leetcode-124-bin ...

最新文章

  1. 《Linux设备驱动开发详解 A》一一2.3 接口与总线
  2. linux端口访问规则,linux 查看开发放端口号--iptables
  3. 恍然小悟,去掉Excel的worksheet(工作表)保护的新方法
  4. 20 best jquery 截图
  5. C#生成安装文件后自动附加数据库的思路跟算法
  6. 计算机网络学习笔记-目录(更新日期:2020.4.8)
  7. 聊天室显示在线人数和已上线人数
  8. C#中Socket用法,多个聊天和单一聊天。
  9. 下载百度网盘资源不限速的两种方法
  10. fms安装教程 linux_安装FMS3 for Linux
  11. 解决xshell SSH 连接远程ubuntu make menuconfig 退格键无法删除问题
  12. 百度测试开发岗面试题(2019秋招)
  13. ArcGIS栅格数据四参数七参数投影变换
  14. 什么是“好”系统呢?
  15. MC0108白给-MC0109新河妇荡杯
  16. 电脑端epub阅读软件分享
  17. 基2-booth乘法器原理及verilog代码
  18. Unity SWS自动寻路插件
  19. 开源软件和商业软件版本的介绍:alpha、beta、rc、GA等等
  20. c语言课程设计 水电费,广东工业大学水电费系统C语言设计(文件操作部分)

热门文章

  1. javascript basical knowledge
  2. 软件设计模式——工厂设计模式
  3. linux syscall参数,SYSCALL: 传递字符串参数的系统调用
  4. W25QXX使用教程
  5. 2、Inferred type ‘S‘ for type parameter ‘S‘ is not within its bound; should extend ‘com.yummy.sell.da
  6. java.sql.SQLException: java.lang.RuntimeException: serious problem
  7. ABC(智能蜂群算法)优化SVM_源码逐行中文注解
  8. 2.11 将PSD文档导入当前文档 [Illustrator CC教程]
  9. 智能电视盒子芯片哪个更强?七大芯片方案性能详解
  10. 关于Android LiveCD的几点问题