最短路径问题 动态规划

这篇博客探讨了如何运用动态规划解决从节点A到节点E的最短路径问题。通过观察,发现原始的深度优先搜索算法存在重复计算,效率低下。改进后的算法将递归转换为递推,避免重复计算,降低时间复杂度至O(n)。博客提供了具体的数据集和代码实现,展示了解决此类问题的过程,并给出了最短路径的结果:16,路径为1-->2-->7-->10-->12。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态规划是一种通过将复杂问题分解为更简单的子问题来解决问题的方法。在最短路径问题中,动态规划可以用来找到从起点到终点的最短路径。Python中可以使用动态规划来解决最短路径问题,下面是一个简单的示例: 假设我们有一个图,图的每个节点都有一个权重,我们希望找到从起点到终点的最短路径。我们可以使用动态规划来解决这个问题。 ```python def shortest_path(graph, start, end): # 创建一个字典来存储从起点到每个节点最短路径 distances = {vertex: float('inf') for vertex in graph} distances[start] = 0 # 创建一个集合来存储已经计算过的节点 visited = set() while True: # 找到当前未访问节点中距离起点最近的节点 current_vertex = None for vertex in graph: if vertex not in visited and (current_vertex is None or distances[vertex] < distances[current_vertex]): current_vertex = vertex if current_vertex is None: break # 标记当前节点为已访问 visited.add(current_vertex) # 更新当前节点的邻居节点的距离 for neighbor, weight in graph[current_vertex].items(): distance = distances[current_vertex] + weight if distance < distances[neighbor]: distances[neighbor] = distance return distances[end] # 示例图 graph = { 'A': {'B': 1, 'C': 4}, 'B': {'A': 1, 'C': 2, 'D': 5}, 'C': {'A': 4, 'B': 2, 'D': 1}, 'D': {'B': 5, 'C': 1} } start = 'A' end = 'D' print(f"从{start}到{end}的最短路径长度为: {shortest_path(graph, start, end)}") ``` 在这个示例中,我们定义了一个`shortest_path`函数,它接受一个图、起点和终点作为参数。函数使用动态规划的方法来计算从起点到终点的最短路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值