news 2026/5/1 11:42:28

代码随想录算法训练营第五十三天 | 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/5/1 8:48:56

Keil+C51联合调试在Proteus中的实战案例解析

从零开始掌握Keil与Proteus联合调试&#xff1a;一个LED闪烁案例的深度实战你有没有过这样的经历&#xff1f;写完一段单片机代码&#xff0c;烧进芯片后却发现外设毫无反应。是程序逻辑错了&#xff1f;还是电路焊反了&#xff1f;又或者晶振没起振&#xff1f;一个个排查下来…

作者头像 李华
网站建设 2026/5/1 8:48:57

银行智能投顾服务:投资建议生成模型通过TensorRT快速响应

银行智能投顾服务&#xff1a;投资建议生成模型通过TensorRT快速响应 在手机上轻点几下&#xff0c;用户就能获得量身定制的资产配置方案——这正是现代银行智能投顾系统带来的体验。然而&#xff0c;看似简单的交互背后&#xff0c;隐藏着巨大的技术挑战&#xff1a;如何让一个…

作者头像 李华
网站建设 2026/5/1 9:58:15

工控场景下STLink驱动安装失败原因全面讲解

工控现场踩过的坑&#xff1a;STLink驱动装不上&#xff1f;一文讲透根源与解法 你有没有遇到过这样的场景—— 产线批量烧录固件&#xff0c;八块PLC板子整齐插好&#xff0c;启动脚本后却发现一半设备“失联”&#xff1b; 调试关键节点时&#xff0c;Keil突然报错&#xf…

作者头像 李华
网站建设 2026/5/1 8:47:56

水资源管理平台:水质预测模型借助TensorRT持续推演

水资源管理平台&#xff1a;水质预测模型借助TensorRT持续推演 在城市水务系统日益复杂的今天&#xff0c;一次突发的工业排污事件可能在数小时内污染整条河流。传统的水质监测依赖人工采样和实验室分析&#xff0c;等结果出来时&#xff0c;污染早已扩散。这种“事后响应”模式…

作者头像 李华
网站建设 2026/5/1 9:51:03

智能家居控制中枢:本地推理保护隐私同时保证响应速度

智能家居控制中枢&#xff1a;本地推理保护隐私同时保证响应速度 在智能家居日益普及的今天&#xff0c;用户对“智能”的期待早已超越了简单的远程开关控制。真正的智慧生活&#xff0c;是系统能听懂你的指令、识别家人的面孔、感知异常行为并即时响应——这一切的背后&#x…

作者头像 李华
网站建设 2026/4/18 14:39:12

如何在 2024 年脱颖而出,成为一名数据科学家

原文&#xff1a;towardsdatascience.com/how-to-stand-out-as-a-data-scientist-in-2024-2d893fb4a6bb?sourcecollection_archive---------4-----------------------#2024-05-09 https://towardsdatascience.medium.com/?sourcepost_page---byline--2d893fb4a6bb-----------…

作者头像 李华