大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

关于A*算法

现在你该知道如何计算每一个方块的分值了(我们将称之为F,它等于G+H),让我们看看A*算法是如何工作的.

这只猫咪将用以下重复的步骤来找到最短路径:

  1. 从开发列表中取得分值最小的方块,我们称之为方块S.
  2. 将方块S从开发列表中删除,并且添加到闭合列表中.
  3. 对于方块S的每一个可到达的邻居方块T:

    A.如果T在闭合列表中:忽略它.

    B.如果T不在开发列表中:把它添加进来并计算它的分值.

    C.如果T已经存在于开放列表中:检查其F值是否比我们使用当前生成的路径要小.如果是,更新它的分值和它父方块.

如果你有点混乱也不用担心 — 我们将用一个例子一步步的像你展示它是如何工作的! :]

猫咪的路径

让我们通过一个例子看看这只懒猫咪是如何找到骨头的.

在下面的图示中,我已经将对应的值列出来了(F = G + H):

  • F(方块的分值):左上角
  • G(从A点到方块的花费):左下角
  • H(从方块到B点的估计花费):右下角

同样,箭头显示出到达该方块的移动方向(指向其父方块.猫猪注).

最终,对于每一步来说,红色方块指示闭合列表,绿色方块指示开发列表.

OK,让我们开始吧!

步骤1

在第一步中,这只猫咪确定其起始位置(点A)的可到的达邻居方块,计算他们的F分值,然后将它们添加到开放列表中:

你可以看到每一个方块中列出了H值(2个为6,一个为4).我建议根据”街区距离”算法自己计算一下,确保你理解这部分是如何工作的.

同样要注意的是F值(左上角)正好是G+H的和(左下角和右下角).

步骤2

接下来,猫咪选择最小分值的方块,将其添加到闭合列表中去,并且获得他的邻居方块.

所以你将看到最小分值方块的F值为4,我们试图将所有它的邻居瓦块添加到开发列表中(并且计算它们的分值),除非它不能被添加(因为它已经在闭合列表中了)或者它是不可到达的(比如墙壁).

注意这里有2个新的瓦块被添加到开放列表中,G值被加1,因为从起始位置到它们有2个瓦块的距离.你可能想去用”街区距离”算法计算一下以确保你懂了了这些新添加瓦块的H值是如何计算的.

A*寻路算法入门(五)的更多相关文章

  1. A*寻路算法入门(七)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  2. A*寻路算法入门(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  3. A*寻路算法入门(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. A*寻路算法入门(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. A星寻路算法入门(Unity实现)

    最近简单学习了一下A星寻路算法,来记录一下.还是个萌新,如果写的不好,请谅解.Unity版本:2018.3.2f1 A星寻路算法是什么 游戏开发中往往有这样的需求,让玩家控制的角色自动寻路到目标地点, ...

  6. A*寻路算法入门(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  7. A*寻路算法入门(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  8. Andrew Ng机器学习算法入门((五):矩阵和向量

    矩阵定义 数学上,一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列 使用Aij来获取矩阵中第i行j列的数据 向量的定义 向量就是n行1列的特殊矩阵 由于向量仅仅只有1行,那么通过一个变量i来指定获 ...

  9. A星寻路算法介绍

    你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...

随机推荐

  1. SpringBoot中跨域问题

    项目中经常会遇到浏览器跨域的问题,解决方式在启动类中配置 @Bean public FilterRegistrationBean corsFilter() { UrlBasedCorsConfigur ...

  2. jquery 跨域请求数据问题

    昨天参加了一个前端的面试,被问到一个跨域请求数据问题,我们之前一直用的是apicloud的api进行请求的,跨域是被apicloud封装起来的,也就没有注意跨域请求数据的问题.当被问到用jquery跨 ...

  3. Linux学习之CentOS(十一)-----Linux 账号管理(转)

    Linux 账号管理(转) useraddpasswdchageusermoduserdelfingerchfnchshidgroupaddgroupmodgroupdelgpasswd su(帐号切 ...

  4. input中v-model和value不能同时调用时解决方案

    <input type="text" v-model="keyWord" value="请输入地名地址" > 当使用如上代码时, ...

  5. Angular5学习笔记 http请求

    在anular4更新到angular5后,有些模块也发生了有些变化,例如http模块. 首先在app.module.ts里面引入HttpClientModule import { HttpClient ...

  6. Rails多路径调用相同方法原路返回的方法

    有时候可能有多条path到达同一个method,此时,我们希望在该方法完成后自动转到之前进入的path中去,其实实现起来非常简单,只需要实现如下两个方法: def redirect_back_or(d ...

  7. springMVC源码分析--ViewResolver视图解析器(一)

    SpringMVC用于处理视图最重要的两个接口是ViewResolver和View.ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对 ...

  8. 安卓高级5 zXing

    ZXing作者的github地址: https://github.com/zxing/zxing 这里为大家也提供一个封装好的最新的ZXing Lib: https://github.com/xuyi ...

  9. 5秒让你的View变3D,ThreeDLayout使用和实现

    在很久很久以前,写了一篇自定义3d view的博客.但是只是讲了如何实现,实现起来还是比较耗时,所以本着平易近人的心态,把他封装成了一个ViewGroup,只需要在你的view或者布局外面包裹一层Th ...

  10. WCF Restful调用跨域解决方案

    目前很多项目中CRM更多扮演一个纯后台管理系统,用户更多的操作是在移动端执行,不管是安卓还是IOS甚至是H5.这里以H5为例,CRM提供数据接口,移动web端来调用接口进行数据处理,这里就会涉及到一个 ...