news 2026/6/10 16:37:04

代码随想录算法训练营第五十三天 | Floyd 算法 A * 算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录算法训练营第五十三天 | Floyd 算法 A * 算法
package main import ( "bufio" "fmt" "os" ) const INF = 10005 func min(a, b int) int { if a < b { return a } return b } func main() { in := bufio.NewReader(os.Stdin) var n, m int fmt.Fscan(in, &n, &m) // grid[i][j] 表示 i -> j 的最短距离 grid := make([][]int, n+1) for i := 0; i <= n; i++ { grid[i] = make([]int, n+1) for j := 0; j <= n; j++ { grid[i][j] = INF } } for i := 0; i < m; i++ { var p1, p2, val int fmt.Fscan(in, &p1, &p2, &val) grid[p1][p2] = val grid[p2][p1] = val // 无向图 } // Floyd-Warshall for k := 1; k <= n; k++ { for i := 1; i <= n; i++ { for j := 1; j <= n; j++ { if grid[i][k]+grid[k][j] < grid[i][j] { grid[i][j] = grid[i][k] + grid[k][j] } } } } var q int fmt.Fscan(in, &q) for q > 0 { q-- var start, end int fmt.Fscan(in, &start, &end) if grid[start][end] == INF { fmt.Println(-1) } else { fmt.Println(grid[start][end]) } } }
package main import ( "bufio" "container/heap" "fmt" "os" ) const N = 1000 var ( moves [N + 1][N + 1]int dir = [8][2]int{ {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}, } b1, b2 int ) /* F = G + H G = 起点到当前节点的代价 H = 当前节点到终点的启发式估计 */ type Knight struct { x, y int g, h int f int } /*************** 优先队列实现 ***************/ type PriorityQueue []Knight func (pq PriorityQueue) Len() int { return len(pq) } // 注意:Go 的 heap 是最小堆,这里要让 f 小的优先 func (pq PriorityQueue) Less(i, j int) bool { return pq[i].f < pq[j].f } func (pq PriorityQueue) Swap(i, j int) { pq[i], pq[j] = pq[j], pq[i] } func (pq *PriorityQueue) Push(x interface{}) { *pq = append(*pq, x.(Knight)) } func (pq *PriorityQueue) Pop() interface{} { old := *pq n := len(old) item := old[n-1] *pq = old[:n-1] return item } /*************** A* 相关 ***************/ // 启发函数:欧氏距离平方(不开根号) func heuristic(k Knight) int { dx := k.x - b1 dy := k.y - b2 return dx*dx + dy*dy } func astar(start Knight) { pq := &PriorityQueue{} heap.Init(pq) heap.Push(pq, start) for pq.Len() > 0 { cur := heap.Pop(pq).(Knight) if cur.x == b1 && cur.y == b2 { return } for i := 0; i < 8; i++ { nx := cur.x + dir[i][0] ny := cur.y + dir[i][1] if nx < 1 || nx > N || ny < 1 || ny > N { continue } if moves[nx][ny] == 0 { moves[nx][ny] = moves[cur.x][cur.y] + 1 next := Knight{ x: nx, y: ny, g: cur.g + 5, // 马走日:1^2 + 2^2 = 5 } next.h = heuristic(next) next.f = next.g + next.h heap.Push(pq, next) } } } } func main() { in := bufio.NewReader(os.Stdin) var t int fmt.Fscan(in, &t) for t > 0 { t-- var a1, a2 int fmt.Fscan(in, &a1, &a2, &b1, &b2) // 清空 moves for i := 1; i <= N; i++ { for j := 1; j <= N; j++ { moves[i][j] = 0 } } start := Knight{ x: a1, y: a2, g: 0, } start.h = heuristic(start) start.f = start.g + start.h astar(start) fmt.Println(moves[b1][b2]) } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:36:02

跨界合作匹配系统:品牌契合度分析由TensorRT智能判断

跨界合作匹配系统&#xff1a;品牌契合度分析由TensorRT智能判断 在数字营销日益智能化的今天&#xff0c;品牌之间的跨界联名早已不再是简单的“强强联合”或“蹭热度”。从运动品牌与潮牌的碰撞&#xff0c;到食品饮料携手电竞IP&#xff0c;每一次成功的合作背后&#xff0…

作者头像 李华
网站建设 2026/6/10 12:35:33

保险理赔自动化:病历文本理解借助TensorRT提升处理效率

保险理赔自动化&#xff1a;病历文本理解借助TensorRT提升处理效率 在保险公司每天处理成千上万份健康险理赔申请的现实场景中&#xff0c;一个看似简单的任务——阅读并理解医生手写的电子病历或结构化出院小结——却成了整个流程的“卡脖子”环节。这些文本往往夹杂着专业术语…

作者头像 李华
网站建设 2026/6/10 12:26:54

Multisim与实际电路对比分析:认知入门篇

从仿真到实物&#xff1a;读懂Multisim与真实电路之间的“鸿沟”你有没有遇到过这种情况&#xff1f;在Multisim里搭了一个放大电路&#xff0c;波形漂亮、增益精准、频率响应平滑——一切看起来完美无瑕。信心满满地焊好PCB或插上面包板&#xff0c;结果一通电&#xff1a;输出…

作者头像 李华
网站建设 2026/6/10 14:37:38

虚拟主播驱动系统:表情动作生成借助TensorRT实现实时联动

虚拟主播驱动系统&#xff1a;表情动作生成借助TensorRT实现实时联动 在直播、虚拟偶像演出和远程教学等场景中&#xff0c;观众对“虚拟人”表现的自然度要求越来越高——不只是能说话&#xff0c;更要能眨眼、微笑、皱眉&#xff0c;甚至随着语调变化做出恰到好处的情绪反馈…

作者头像 李华
网站建设 2026/6/10 14:36:35

AI 镜像开发实战:从自定义构建到优化部署的全流程指南

在 AI 工程化落地浪潮中&#xff0c;镜像技术成为连接算法模型与生产环境的核心桥梁 —— 它通过容器化封装&#xff0c;解决了模型部署时的环境依赖冲突、跨平台适配复杂、迭代效率低下等痛点&#xff0c;让 AI 能力从实验室快速走向产业场景。本文结合主流技术栈与实战案例&a…

作者头像 李华
网站建设 2026/6/10 14:54:19

python小程序 基于图片识别的菜品销售系统 美食点餐外卖系统 优惠卷_61536141

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 python小程序 基于图片识别的菜品销售系统 美食点餐外卖系统 …

作者头像 李华