当前位置: 首页 > news >正文

【代码随想录算法训练营——Day61】图论——97.小明逛公园、127.骑士的攻击

卡码网题目链接
https://kamacoder.com/problempage.php?pid=1155
https://kamacoder.com/problempage.php?pid=1203

题解
97.小明逛公园
floyd算法用到了动态规划的思想,但感觉还是有点迷糊,python三维数组创建也出现了问题,感觉用动态规划的思想理解问题就是容易不熟悉。

127.骑士的攻击
还可以用广搜写法,真是涨知识(虽然超时了)。这题的代码注释很多,是我看不懂用deepseek写的,其实写了还是看不懂,一知半解,题解写的python语法也有不懂的地方,再加上题目又不懂,就双重不懂。

代码

#97.小明逛公园
if __name__ == "__main__":n, m = map(int, input().split())graph = [[[10005] * (n + 1) for _ in range(n + 1)] for _ in range(n + 1)]for _ in range(m):u, v, w = map(int, input().split())graph[u][v][0] = wgraph[v][u][0] = wfor k in range(1, n + 1):for i in range(1, n + 1):for j in range( 1, n + 1):graph[i][j][k] = min(graph[i][j][k - 1], graph[i][k][k - 1] + graph[k][j][k - 1])Q = int(input())for _ in range(Q):start, end = map(int, input().split())if graph[start][end][n] == 10005:print(-1)else:print(graph[start][end][n])
#127.骑士的攻击
import heapq
if __name__ == "__main__":moves = [(1, 2), (2, 1), (-1, 2), (2, -1), (1, -2), (-2, 1), (-1, -2), (-2, -1)]n = int(input())def distance(a, b):return ((a[0] - b[0]) ** 2 + (a[1] - b [1]) ** 2) ** 0.5def bfs(start, end):# q 是一个优先队列(通常用最小堆实现)# 每个元素是元组: (估算的总代价, 当前节点)# distance(start, end) - 启发式函数,估算从start到end的代价# start - 当前节点# 示例:如果从起点到终点的直线距离是10# 那么 q = [(10, 起点)]q = [(distance(start, end), start)]# step 是一个字典,记录到达每个节点的实际代价(g值)# key: 节点# value: 从起点到达该节点的实际代价# {起点: 0} 表示从起点到起点的实际代价为0step = {start : 0}while q:d, cur = heapq.heappop(q)if cur == end:return step[cur]for move in moves:new = (move[0] + cur[0], move[1] + cur[1])if 1 <= new[0] <= 1000 and 1 <= new[1] <= 1000:# 计算从起点经过当前节点cur到达新节点new的实际代价# step[cur] - 到达当前节点cur的实际代价(g值)# + 1 - 从cur到new的边代价(这里假设每步代价为1)# 示例:如果到达cur的实际代价是3,那么到达new的实际代价就是4step_new = step[cur] + 1# 检查是否找到了到达new节点的更短路径# step.get(new, float('inf')) - 获取之前到达new的最小代价,如果没访问过则返回无穷大# 如果新路径的代价更小,就更新if step_new < step.get(new, float('inf')):# 更新到达new节点的最小实际代价# 记录新的更优路径step[new] = step_new# 将新节点加入优先队列# distance(new, end) - 启发式估计(h值),从new到终点的估算代价# step_new - 实际代价(g值)# 两者相加就是 f值 = g + h# 队列按f值排序,优先探索f值小的节点heapq.heappush(q, (distance(new, end) + step_new, new))return Falsefor _ in range(n):a1, a2, b1, b2 = map(int, input().split())print(bfs((a1, a2), (b1, b2)))
http://www.dtcms.com/a/581947.html

相关文章:

  • [Dify 实战] 使用 System Prompt 实现企业级策略管控
  • JVM架构与执行流程详解
  • 02 Prompt组件及使用技巧
  • 做网站能用微软企业公示信息年报
  • 本地赣州网站建设网站建设数据库选择
  • 多维竞争时代:手游ASO优化核心策略与安卓商店差异化
  • Linux命令-e2label命令(设置第二扩展文件系统的卷标)
  • 企业AI开发什么工具好?从“可用”到“好用”的全生命周期管理指南
  • (Linux)ELF格式与库的链接原理
  • 如何做网站的营销网站技术防护建设
  • C++新特性 chr类型编码
  • 指纹浏览器模拟功能的实践体验分享
  • C++ 设计模式《订单的撤销和重做》
  • 国网法治建设网站阿里巴巴推广平台
  • 【AI学习-comfyUI学习-SDXL 风格化提示词节点包(Style Prompt Node Pack) 工作流-各个部分学习-第四节】
  • 怎样建设有价值的网站天津建设工程信息网中标公告
  • 提升大语言模型性能的关键技术清单(from 网络)
  • 【NLP】Penn Treebank 与 Parsing:让计算机看懂句子结构
  • Go 1.25 发布:性能、工具与生态的全面进化
  • 北京市保障性住房建设投资中心网站淮南吧
  • Duilib_CEF桌面软件实战之Duilib编译与第一个界面程序
  • MFC动态加载图片
  • Niagara Launcher 全新Android桌面启动器!给手机换个门面!
  • 【Vue】自定义指令之权限控制
  • asp.net网站第一次运行慢网站建设合同书保密条款
  • ZYNQ-7000双核协处理实战:ARM Cortex-A9与FPGA的智能数据采集系统
  • 慈溪哪里有做网站怎么看网站pv
  • 【PySpark】conda create -n pyspark python=3.8报错
  • CSS 数学函数完全指南:从基础计算到高级动画
  • uni-app打包app -- 在用户首次启动 App 时,强制弹出一个“用户协议与隐私政策”的确认对话框。