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 10:57:07

品牌声誉监控:社交媒体情绪分析通过TensorRT全天候追踪

品牌声誉监控&#xff1a;社交媒体情绪分析通过TensorRT全天候追踪 在微博热搜瞬息万变、一条短视频可能引爆全网舆论的今天&#xff0c;企业对品牌声誉的掌控力正面临前所未有的挑战。某知名饮料品牌曾因一段用户拍摄的“瓶盖松动”视频&#xff0c;在48小时内遭遇负面舆情扩散…

作者头像 李华
网站建设 2026/6/10 10:55:46

核心要点:提升USB识别成功率的关键设置

如何让电脑真正“看见”你的USB设备&#xff1f;——从驱动到固件的全链路排错指南 你有没有遇到过这样的情况&#xff1a; 插上U盘&#xff0c;系统毫无反应&#xff1b; 外接硬盘连灯都不亮&#xff1b; 手机能充电&#xff0c;但就是传不了文件…… 明明线是好的&#…

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

ArduPilot日志系统解析:数据记录深度讲解

ArduPilot日志系统深度剖析&#xff1a;从“黑匣子”到调试利器你有没有遇到过这样的场景&#xff1f;无人机在空中突然抖动&#xff0c;落地后一切正常&#xff0c;遥控器也没报警。你想查原因&#xff0c;却发现遥测数据只记录了每秒一次的姿态角——根本看不出高频振荡的蛛丝…

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

在线教育智能阅卷:作文评分模型通过TensorRT实现秒级反馈

在线教育智能阅卷&#xff1a;作文评分模型通过TensorRT实现秒级反馈 在一场全国性在线模拟考试中&#xff0c;数万名学生几乎在同一时间提交了语文作文。传统的人工批改需要数天才能完成&#xff0c;而此时&#xff0c;某教育平台的后台系统却在平均68毫秒内完成了每一篇作文的…

作者头像 李华
网站建设 2026/6/8 16:25:13

零基础学工控:Keil开发环境安装与基础设置教程

零基础也能上手&#xff1a;Keil开发环境安装与配置实战指南 你是不是也遇到过这种情况——买了一块STM32开发板&#xff0c;兴致勃勃想点亮一个LED&#xff0c;结果刚打开电脑就卡在了第一步&#xff1a; Keil怎么装&#xff1f;为什么编译报错&#xff1f;程序下不进去怎么…

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

基于python宠物医院药品管理系统的设计与实现_5xeq5a9b

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 基于python宠物医院药品管理系统的设计与实现_5xeq5a9b …

作者头像 李华