码迷,mamicode.com
首页 > 编程语言 > 详细

这是一个真正靠谱的寻路算法

时间:2016-06-20 23:40:48      阅读:373      评论:0      收藏:0      [点我收藏+]

标签:

绝对没有其他看起来高大上 给别人讲都将不明白的理论。管你 人工智能 啥的 ,还有一百度一大篇的a*算法 ,其实大部分文章的理论都是讲不通的 或者没有讲清楚 更别说代码。做事刨根问底的牛脾气又上来了。
 
两周前 偶然原因接触到了寻路算法 于是百度 找到了a* 。讲来将去大概意思就是持续性的找离目标近的节点 并且走过的节点不能重复走。反正百度搜a*算法 一搜一大片。在很简单的障碍的情况下是没问题 :
技术分享
 
但是拐个弯就不行了,不是找最近的么,我让你一直找最近的。 直接迂在里面出不来了:
技术分享
 
期间我曾经想过为什么不让旁边的叶子节点继续开枝散叶 继续寻找呢。当时就觉得这种方式是可行的。因为起点跟终点我们始终在同一个能够联通的领域嘛 我就像水一样不断的蔓延不断的蔓延到你那去。始终是能到达的。这可能就是网上说的所谓的广度搜索。节点 又继续节点 当时就想到递归嘛,没想到粗糙的用递归 把我自己给绕进去了 。本身是一个树状结构。哪些节点遍历了 哪些没有遍历 容易形成交叉 或者死循环 。最终要形成一个线性的遍历流程 。 程序要有一个严密的理论基础 ,如果达不到这一点随便怎么倒腾始终会崩溃的。就在这个问题上我遇到了瓶颈,始终不能解决 ,因为自己太菜了 处理不好这种数据结构。在最近两天看数据结构二叉树那一部分的时候 看到了 那种严密的遍历和组织二叉树 数据的方式  于是我觉得有方法了。
 
换作人的思维 如果我们想 接近一个目标 我们该怎么做, 废话 走直路咯 ,当然是怎么近怎么走 。对咯 那么我们应该在下一步上下左右的。所有坐标中 选择 离目标最近的那个,这个已经在第一个图a*算法中就说明了。遇到阻挡了怎么办呢 ,开枝散叶 让接近出口的节点继续蔓延,这里有一个细节 就是接着继续找的时候要以距离近的节点优先。 就是这样根本没啥复杂的理论。我们要想办法用程序语言 组织一个“树”来解决这些问题 ,并且不能让他们产生交叉 和循环遍历的逻辑错误。
技术分享
 
nice 就是这样 这就是我想要的结果 。还差最后一步。
既然已经触及到最终目标了 那么剩下的 自然就是用“顺藤摸瓜”的方式找回去的路径。最后一个节点依次找他的父节点  直至找到起点为止  来形成一个唯一的路径。
 
技术分享技术分享
 
哇咔咔 不由得佩服我自己。这是属于我的领域 我将以我的上帝之眼 和我的灵魂感知触及世界的所有能触及的领域  你是逃不掉的 。哇哈哈哈哈,是不是好好玩。 最后一看 我ca 竟然自动就是最优路径 。 我本来还想继续处理这个问题的。自然界就是这么神奇 ,微妙的关系里存在着一种平衡 ,就像我说的hsl颜色处理的那篇博文一样 。你看 他选择最佳直线路径的时候 如果遇到了阻挡 自动就迂回在里面了 并且事先把这个坑填满了  最终达到坏死  ,然后让外面的路径直接越过坑的外延 到达了目标 。 有时候想想 既是科学 又是一种平衡的哲学 自然界 造物主就是这么的神奇。 源码稍后奉上 。。。。。

这是一个真正靠谱的寻路算法

标签:

原文地址:http://www.cnblogs.com/assassinx/p/5602100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!