代码随想录算法训练营第六十天|KM94.城市间货物运输Ⅰ|KM95.城市间货物运输Ⅱ|KM96.城市间货物运输Ⅲ

devtools/2025/1/11 12:36:01/

94. 城市间货物运输 I

2、Bellman_ford队列优化算法(又名SPFA)

        SPFA是对Bellman_ford算法的优化,由于Bellman_ford 算法 每次都是对所有边进行松弛,其实是多做了一些无用功。其实只需要对 上一次松弛的时候更新过的节点作为出发节点所连接的边 进行松弛就够了。

python">import collectionsdef main():n, m = map(int, input().strip().split())edges = [[] for _ in range(n+1)]for _ in range(m):src, dest, weight = map(int, input().strip().split())edges[src].append([dest, weight])# 初始化minDist = [float('inf')] * (n+1)# 第一个节点为0minDist[1] = 0que = collections.deque([1])visited = [False] * (n+1)visited[1] = Truewhile que:cur = que.popleft()visited[cur] = Falsefor dest, weight in edges[cur]:if minDist[cur] != float('inf') and minDist[cur] + weight < minDist[dest]:minDist[dest] = minDist[cur] + weightif visited[dest] == False:que.append(dest)visited[dest] = Trueif minDist[-1] == float('inf'):print('unconnnected')return minDist[-1]if __name__ == '__main__':print(main())

95. 城市间货物运输 II

        本题是要我们判断 负权回路,也就是图中出现环且环上的边总权值为负数。

        如果在这样的图中求最短路的话, 就会在这个环里无限循环 (也是负数+负数 只会越来越小),无法求出最短路径。(有负权回路的情况下,一直都会有更短的最短路,所以 松弛 第n次,minDist数组 也会发生改变。)

python">import collections
from math import inf
def main():n, m = map(int, input().strip().split())edges = [[] for _ in range(n+1)]# 记录节点接入队列的次数count = [0 for _ in range(n+1)]for _ in range(m):src, dest, weight = map(int, input().strip().split())edges[src].append([dest, weight])# 初始化minDist = [float('inf')] * (n+1)# 第一个节点为0minDist[1] = 0que = collections.deque([1])count[1] = 1flag = False# 主循环while que:cur = que.popleft()for dest, weight in edges[cur]:if minDist[cur] + weight < minDist[dest]:minDist[dest] = minDist[cur] + weightcount[dest] += 1if dest not in que:que.append(dest)if count[dest] == n:flag = Trueif flag:breakif flag:print('circle')else:if minDist[-1] == float('inf'):print('unconnected')else:print(minDist[-1])if __name__ == '__main__':main()

96. 城市间货物运输 III

本题理解起来有点难度,放着等二刷;

使用SPFA方法求解单源有限最短路;

python">from collections import deque
from math import infdef main():n, m = [int(i) for i in input().split()]graph = [[] for _ in range(n+1)]for _ in range(m):v1, v2, val = [int(i) for i in input().split()]graph[v1].append([v2, val])src, dst, k = [int(i) for i in input().split()]min_dist = [inf for _ in range(n+1)]min_dist[src] = 0  # 初始化起点的距离que = deque([src])while k != -1 and que:visited = [False for _ in range(n+1)]  # 用于保证每次松弛时一个节点最多加入队列一次que_size = len(que)temp_dist = min_dist.copy()  # 用于记录上一次遍历的结果for _ in range(que_size):cur_node = que.popleft()for next_node, val in graph[cur_node]:if min_dist[next_node] > temp_dist[cur_node] + val:min_dist[next_node] = temp_dist[cur_node] + valif not visited[next_node]:que.append(next_node)visited[next_node] = Truek -= 1if min_dist[dst] == inf:print("unreachable")else:print(min_dist[dst])if __name__ == "__main__":main()

http://www.ppmy.cn/devtools/149615.html

相关文章

网络安全 | DevSecOps:将安全融入DevOps开发生命周期

网络安全 | DevSecOps&#xff1a;将安全融入DevOps开发生命周期 一、前言二、DevSecOps 的概念与原则2.1 DevSecOps 的概念2.2 DevSecOps 的原则 三、DevSecOps 的关键实践3.1 安全需求分析与管理3.2 安全设计与架构3.3 安全编码实践3.4 安全测试策略3.5 安全部署与运维 四、D…

sklearn-逻辑回归-制作评分卡

目录 数据集处理 分箱 分多少个箱子合适 分箱要达成什么样的效果 对一个特征进行分箱的步骤 分箱的实现 封装计算 WOE 值和 IV值函数 画IV曲线&#xff0c;判断最佳分箱数量 结论 pd.qcut 执行报错 功能函数封装 判断分箱个数 在银行借贷场景中&#xff0c;评分卡是…

宝塔安装教程,bt怎么安装 linux

Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 37a09b35 Ubuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo b…

《HeadFirst设计模式》笔记(下)

11 代理模式 代理要做的就是控制和管理访问。 你的客户对象所做的就像是在做远程方法调用&#xff0c;但其实只是调用本地堆中的“代理”对象上的方法&#xff0c;再由代理处理所有网络通信的低层细节。 Java的RMI提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对…

LeetCode599 两个列表的最小索引总和

解决餐厅选择难题&#xff1a;寻找共同喜爱且索引和最小的餐厅 在生活中&#xff0c;我们常常会面临各种选择难题&#xff0c;就像 Andy 和 Doris 在决定晚餐去哪家餐厅时遇到的困扰。他们各自心中都有一份喜爱餐厅的清单&#xff0c;而现在的任务是找出他们共同喜爱的餐厅中&…

命令模式详解与应用

命令模式&#xff08;Command Pattern&#xff09;&#xff0c;是一种行为型设计模式。它将请求封装成对象&#xff0c;从而可以参数化其他对象&#xff0c;使得不同的请求、队列或者日志请求等操作都可以被实现&#xff0c;并且支持可撤销的操作。通过引入命令对象来解耦请求的…

日常工作之 Elasticsearch 常用查询语句汇总

日常工作之 Elasticsearch 常用查询语句汇总 查询现有索引创建索引查询索引结构插入数据查询索引数据查看索引磁盘占用信息删除索引查看分词器分词结果指定查询数量指定条件查询数据迁移统计索引数据量更新数据 在使用 es 的过程中&#xff0c;总是会用到 es 的查询语句&#x…

机器学习顶会NeurIPS: AGILE: A Novel Reinforcement Learning Framework of LLM Agents

&#x1f31f; 研究背景 &#x1f31f; 随着大型语言模型&#xff08;LLMs&#xff09;在指令遵循、推理和零样本学习等方面展现出卓越的能力&#xff0c;基于LLMs的自主代理&#xff08;LLM Agents&#xff09;的研究逐渐兴起。然而&#xff0c;如何将规划、反思、工具使用等…