你是否在做一款H5游戏的时候想创造一些游戏主角,让它们移动到指定的位置,避开墙壁和障碍物呢?
下面的案例是由纯js实现的,由canvas绘图,并只考虑向上下左右四邻域移动。
效果展示图
核心思想
1 | //第一步:画棋盘,向外扩展一圈 |
我是如下初始化参数的:
1 | var me = this; |
小结
我是这么理解的,Dijkstra算法就是从起点开始一圈一圈向外扩散,直到扩散到终点,这样做肯定慢,但还是能找到一条最短路径。贪婪算法从直观上理解就是用最快的方法来解决问题,主要目标是快,从数学上来理解就是在做判断时以当前最优解为基础,每次取的都是当前位置距离终点最近的点,因为算法是取的局部最优解,没有考虑以后的问题,所以整体上是很难找到最短路径的。
贪婪是每个人都有的,但也要适可而止。我们的目标是要找到一条最短路径的前提下,速度适当的要快一点。于是,A*算法就应运而生了,既考虑了起点,又考虑了终点(要选取适合的启发函数)。明白了它大概的思想后,童鞋们就可以开始摸索啦~~~嘻嘻