游戏常见算法——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 阅读更多 →

最新新闻

Spring Boot 3 + Vue 3 + MySQL AI 物业管理系统源码前后端分离实战

Spring Boot 3 + Vue 3 + MySQL AI 物业管理系统源码前后端分离实战

一、项目简介 翡翠物业管理系统是一套基于 Spring Boot 3 Vue 3 MySQL 构建的 AI 辅助物业综合管理平台。系统采用前后端分离架构,内置管理员、物业人员、业主三种角色,覆盖楼栋房间管理、车位管理、收费管理、反馈工单、公告发布、操作日志监控等核心…

2026/7/23 3:28:34 阅读更多 →
基于TI Hercules MibSPIP与DMA实现高速并行SPI通信实战

基于TI Hercules MibSPIP与DMA实现高速并行SPI通信实战

1. 项目概述与核心价值在嵌入式系统开发,尤其是汽车电子和工业控制领域,我们常常面临一个经典难题:如何在有限的CPU资源和严格的实时性要求下,实现与外设或其它处理器之间高速、可靠的数据交换。SPI(串行外设接口&…

2026/7/23 3:28:34 阅读更多 →
python爬虫基础实战案例

python爬虫基础实战案例

文章目录1 实战一:爬取豆瓣Top250图书信息目标分析完整代码2 实战二:批量下载图片关键技巧多线程加速下载3 实战三:爬取表格数据并存入Excel安装依赖爬取天气历史数据4 完整项目:知乎热榜数据采集下面通过几个经典案例把前面的知识…

2026/7/23 3:28:34 阅读更多 →
DVD视频备份与MP4格式转换全指南

DVD视频备份与MP4格式转换全指南

1. 从DVD到数字存储:视频备份与格式转换全指南每次整理家里的DVD收藏时,总担心这些珍贵的影像资料会因为碟片老化而消失。上周我就遇到一张十年前的家庭录像DVD无法读取的情况,这促使我系统研究了DVD视频备份的方案。把DVD内容转存到硬盘并转…

2026/7/23 3:28:34 阅读更多 →
企业私有化大模型平台CSGHub架构与落地实践

企业私有化大模型平台CSGHub架构与落地实践

1. 企业私有化大模型平台的战略价值在数字化转型浪潮中,企业级AI基础设施正从"能用"向"可控"演进。CSGHub这类私有化大模型平台的核心价值在于,它让企业摆脱了公有云服务的黑箱限制,实现了从数据预处理、模型训练到推理服…

2026/7/23 3:28:34 阅读更多 →
SM技术全解析:状态机与会话管理的工程实践指南

SM技术全解析:状态机与会话管理的工程实践指南

在技术领域,我们常常会遇到一些看似简单却蕴含深意的缩写和概念。SM 这个组合在计算机科学中有着多重含义,从系统管理到状态机,从安全模型到存储管理,不同的上下文赋予它完全不同的技术内涵。理解这些缩写背后的具体场景&#xff…

2026/7/23 3:27:34 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01: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 阅读更多 →

月新闻