游戏常见算法——A*算法
概念你已经走过的路有多长​ —— 这叫 g 值实际代价。你猜剩下的路还有多远​ —— 这叫 h 值启发式估计。A* 算法每次都会选 总花费最小g h的方向去探索这样既能保证最终找到最短路径又比盲目的广度优先搜索快得多。关键术语启发式函数对于网格地图常用的启发式有曼哈顿距离四方向移动|dx| |dy|欧几里得距离任意方向sqrt(dx² dy²)只要 h(n) 不大于真实剩余代价可采纳性A* 就能保证找到最短路径。曼哈顿距离是最常用的可采纳启发式。代码importheapqclassNode:网格中的一个节点def__init__(self,x,y):self.xx self.yy self.gfloat(inf)# 起点到此的实际代价self.h0# 启发式估计代价self.ffloat(inf)# g hself.parentNone# 用于回溯路径def__lt__(self,other):returnself.fother.fdefheuristic(a,b):曼哈顿距离作为启发式returnabs(a.x-b.x)abs(a.y-b.y)defa_star(grid,start,end): grid: 二维列表0可走1障碍 start, end: (x, y) 坐标 返回: 路径列表 [(x,y), ...] 或 None rows,colslen(grid),len(grid[0])# 创建节点矩阵nodes[[Node(x,y)foryinrange(cols)]forxinrange(rows)]# 起点和终点start_nodenodes[start[0]][start[1]]end_nodenodes[end[0]][end[1]]start_node.g0start_node.hheuristic(start_node,end_node)start_node.fstart_node.gstart_node.h open_list[]heapq.heappush(open_list,start_node)closed_setset()# 四个方向上下左右directions[(-1,0),(1,0),(0,-1),(0,1)]whileopen_list:currentheapq.heappop(open_list)# 到达终点ifcurrentend_node:path[]whilecurrent:path.append((current.x,current.y))currentcurrent.parentreturnpath[::-1]# 反转得到从起点到终点closed_set.add((current.x,current.y))# 检查邻居fordx,dyindirections:nx,nycurrent.xdx,current.ydy# 边界检查ifnx0ornxrowsorny0ornycols:continue# 障碍物检查ifgrid[nx][ny]1:continue# 已在 closed list 中if(nx,ny)inclosed_set:continueneighbornodes[nx][ny]tentative_gcurrent.g1# 假设每步代价为1iftentative_gneighbor.g:# 找到了更好的路径neighbor.parentcurrent neighbor.gtentative_g neighbor.hheuristic(neighbor,end_node)neighbor.fneighbor.gneighbor.h# 如果邻居不在 open list 中则加入否则堆会自动处理重复因为已更新fheapq.heappush(open_list,neighbor)returnNone# 无路径# ---------- 测试 ----------if__name____main__:# 0 空地, 1 障碍grid[[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0]]start(0,0)end(9,9)patha_star(grid,start,end)ifpath:print(找到路径共 {} 步.format(len(path)-1))forpinpath:print(p,end - )print(终点)# 可视化visual[[.for_inrange(10)]for_inrange(10)]foriinrange(10):forjinrange(10):ifgrid[i][j]1:visual[i][j]█for(x,y)inpath:visual[x][y]*visual[start[0]][start[1]]Svisual[end[0]][end[1]]Eforrowinvisual:print( .join(row))else:print(无法到达终点)

相关新闻

2026年,我的跨境社媒账号被限流7次后,挖出3条平台不愿明说的生存铁律

2026年,我的跨境社媒账号被限流7次后,挖出3条平台不愿明说的生存铁律

在算法的暗流中求生:一位跨境运营者的三次顿悟 凌晨三点,屏幕的冷光映在我疲惫的脸上。后台数据曲线又一次毫无征兆地跌入谷底——这是我的跨境社交媒体账号第七次遭遇限流。两年时间,七个账号,七次重创。每一次都像是被无形的巨手…

2026/7/22 22:05:04 阅读更多 →
LambdaWorks数学基础:椭圆曲线与多项式承诺方案

LambdaWorks数学基础:椭圆曲线与多项式承诺方案

LambdaWorks数学基础:椭圆曲线与多项式承诺方案 【免费下载链接】lambdaworks lambdaworks offers implementations for both SNARKs and STARKs provers, along with the flexibility to leverage their individual components for constructing customized SNARKs…

2026/7/22 22:05:04 阅读更多 →
Chrome插件Content Script开发:页面注入与DOM操作

Chrome插件Content Script开发:页面注入与DOM操作

摘要:本文详细介绍Chrome插件Content Script的开发,重点讲解页面注入机制、DOM操作方法、与Background Script通信等核心技术,并以MuxDesk的两款独立Chrome插件(Instagram视频下载器、Telegram视频下载器)为例展示实际…

2026/7/22 22:04:04 阅读更多 →

最新新闻

【图像加密】基于模糊技术和维纳滤波器的图像加密解密算法研究附matlab代码

【图像加密】基于模糊技术和维纳滤波器的图像加密解密算法研究附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/7/22 22:52:21 阅读更多 →
【优化求解】基于粒子群优化PID优化水位附matlab代码

【优化求解】基于粒子群优化PID优化水位附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/7/22 22:52:21 阅读更多 →
从0到1开发Reark应用:GitHub API集成与响应式搜索功能实现

从0到1开发Reark应用:GitHub API集成与响应式搜索功能实现

从0到1开发Reark应用:GitHub API集成与响应式搜索功能实现 【免费下载链接】reark RxJava architecture library for Android 项目地址: https://gitcode.com/gh_mirrors/re/reark Reark是一个基于RxJava架构的Android库,专为构建响应式应用设计。…

2026/7/22 22:52:21 阅读更多 →
Netplan 助力:Ubuntu 发行版命令行自定义 DNS,简单又强大!

Netplan 助力:Ubuntu 发行版命令行自定义 DNS,简单又强大!

Netplan 登场!在 Ubuntu 发行版上自定义 DNS,命令行配置原来如此简单我使用 Netplan 在基于 Ubuntu 的发行版上自定义 DNS。这种命令行(CLI)方法或许乍看有些令人却步,但它的强大之处会让你眼前一亮。此方法在桌面端和…

2026/7/22 22:52:21 阅读更多 →
【无人机三维路径规划】基于RRT算法的城市环境下含鸟类障碍物的全自主无人机导航系统附Matlab代码

【无人机三维路径规划】基于RRT算法的城市环境下含鸟类障碍物的全自主无人机导航系统附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/7/22 22:52:21 阅读更多 →
终极ASMR下载工具:asmr-downloader完整使用指南

终极ASMR下载工具:asmr-downloader完整使用指南

终极ASMR下载工具:asmr-downloader完整使用指南 asmr-downloader是一款专为ASMR爱好者设计的开源下载工具,能够从asmr.one平台快速获取高质量的音频资源。无论你是初次接触ASMR的新手还是资深收藏家,这款工具都能为你提供简单高效的下载体验…

2026/7/22 22:51:21 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻