Kimi    LeetCode LCP 35. 电动车游城市 Python3实现 以下是 LCP 35. 电动车游城市 的 Python3 实现采用 分层图最短路 Dijkstra 算法。---解题思路这是一道经典的分层图最短路问题。核心思想是将状态定义为 (城市, 电量) 二元组然后在这个扩展的状态空间上运行 Dijkstra 算法 。状态空间- 节点(城市 i, 电量 c)其中 0 c cnt- 充电边(i, c) → (i, c1)权重 charge[i]充 1 单位电的时间- 行驶边(i, c) → (j, c-w)权重 w行驶距离 时间要求 c w为什么第一次到达终点就是最优解因为 Dijkstra 按总时间从小到大扩展第一次从优先队列中取出终点状态时即为全局最短时间。---Python3 代码pythonimport heapqfrom typing import Listclass Solution:LCP 35. 电动车游城市小明的电动车电量充满时可行驶距离为 cnt每行驶 1 单位距离消耗 1 单位电量且花费 1 单位时间。地图上共有 N 个景点景点编号为 0 ~ N-1。paths 表示城市间的双向通路及距离。初始状态电动车电量为 0。每个城市都设有充电桩charge[i] 表示第 i 个城市每充 1 单位电量需要花费的单位时间。返回小明最少需要花费多少单位时间从起点城市 start 抵达终点城市 end。算法分层图最短路 Dijkstra状态(城市, 电量) 二元组def electricCarPlan(self, paths: List[List[int]], cnt: int, start: int, end: int, charge: List[int]) - int:n len(charge)# 建图邻接表graph [[] for _ in range(n)]for u, v, w in paths:graph[u].append((v, w))graph[v].append((u, w))# dist[i][c] 到达城市 i 且剩余电量为 c 时的最小时间INF float(inf)dist [[INF] * (cnt 1) for _ in range(n)]dist[start][0] 0# Dijkstra 优先队列(总时间, 城市, 电量)pq [(0, start, 0)]while pq:cost, city, power heapq.heappop(pq)# 如果已经找到更优解跳过if cost dist[city][power]:continue# 到达终点直接返回Dijkstra 保证第一次到达终点就是最优解if city end:return cost# 操作1在当前城市充电电量1if power cnt:new_cost cost charge[city]if new_cost dist[city][power 1]:dist[city][power 1] new_costheapq.heappush(pq, (new_cost, city, power 1))# 操作2前往相邻城市电量减少时间增加for nxt, w in graph[city]:if power w: # 电量足够到达下一个城市new_power power - wnew_cost cost wif new_cost dist[nxt][new_power]:dist[nxt][new_power] new_costheapq.heappush(pq, (new_cost, nxt, new_power))# 题目保证所有城市相互可以到达所以不会执行到这里return -1---复杂度分析- 时间复杂度O((N \times C M \times C) \log(N \times C))其中 N 为城市数C cnt 为最大电量M 为路径数。每个状态最多被扩展一次每次扩展涉及充电和行驶两种操作。- 空间复杂度O(N \times C M)用于存储距离数组、优先队列和邻接表。---示例验证示例 输入 输出 解释1 paths[[1,3,3],[3,2,1],[2,1,3],[0,1,4],[3,0,5]], cnt6, start1, end0, charge[2,10,4,1] 43 路线 1→3→0充电 3×10 5×1 35行驶 3 5 82 paths[[0,4,2],[4,3,5],[3,0,5],[0,1,5],[3,2,4],[1,2,8]], cnt8, start0, end2, charge[4,1,1,3,2] 38 路线 0→4→3→2充电 4×2 2×8 3×1 27行驶 2 5 4 11---下载文件[lcp35_electric_car_plan.py](sandbox:///mnt/agents/output/lcp35_electric_car_plan.py)

相关新闻

最新新闻

怎么建立一个能够发现“未知互联网资产”的暴露面监控体系

怎么建立一个能够发现“未知互联网资产”的暴露面监控体系

1. 网络空间测绘平台 这个是最直接的方式。即使 IP 不在你的扫描范围,Shodan、FOFA、ZoomEye、Quake、Hunter 等平台也可能已经扫过它。 关键不是扫 IP,而是用“厂商特征”去搜: 证书组织名域名备案信息favicon hashJS 文件 hash页面 titleHT…

2026/8/26 20:01:49
Repo Chat快速上手教程:10分钟从零搭建你的GitHub仓库AI代码问答系统

Repo Chat快速上手教程:10分钟从零搭建你的GitHub仓库AI代码问答系统

Repo Chat快速上手教程:10分钟从零搭建你的GitHub仓库AI代码问答系统 【免费下载链接】repo-chat Use AI to ask questions about any GitHub repo. 项目地址: https://gitcode.com/gh_mirrors/re/repo-chat Repo Chat 是一个开源的 GitHub 仓库 AI 代码问答…

2026/8/26 20:01:49
currency Formatter教程:多语言货币格式化与解析的10个实用技巧

currency Formatter教程:多语言货币格式化与解析的10个实用技巧

currency Formatter教程:多语言货币格式化与解析的10个实用技巧 【免费下载链接】currency Currency handling for Go. 项目地址: https://gitcode.com/gh_mirrors/cu/currency currency 是一个为 Go 语言打造的货币处理库,基于 CLDR v48 数据&am…

2026/8/26 20:01:49
volrend 体渲染器双后端揭秘:CUDA 与片元着色器后端的性能差异与取舍指南

volrend 体渲染器双后端揭秘:CUDA 与片元着色器后端的性能差异与取舍指南

volrend 体渲染器双后端揭秘:CUDA 与片元着色器后端的性能差异与取舍指南 【免费下载链接】volrend PlenOctree Volume Rendering (supports CUDA & fragment shader backends) 项目地址: https://gitcode.com/gh_mirrors/vo/volrend volrend 是一个用 C…

2026/8/26 20:01:49
CipherChat的System Prompt工程深剖:为什么few-shot演示能让GPT-4乖乖破解密码

CipherChat的System Prompt工程深剖:为什么few-shot演示能让GPT-4乖乖破解密码

CipherChat的System Prompt工程深剖:为什么few-shot演示能让GPT-4乖乖破解密码 【免费下载链接】CipherChat A framework to evaluate the generalization capability of safety alignment for LLMs 项目地址: https://gitcode.com/gh_mirrors/ci/CipherChat …

2026/8/26 20:01:49
不装ROS也能做机械臂逆运动学?PyKDL IK完整指南(mujoco-learning实战)

不装ROS也能做机械臂逆运动学?PyKDL IK完整指南(mujoco-learning实战)

不装ROS也能做机械臂逆运动学?PyKDL IK完整指南(mujoco-learning实战) 【免费下载链接】mujoco-learning 项目地址: https://gitcode.com/gh_mirrors/mu/mujoco-learning 还在为配置 ROS 环境头秃吗?其实做**机械臂逆运动…

2026/8/26 19:56:48