A-star寻路算法
来源:互联网 发布:淘宝怎么发货填写单号 编辑:程序博客网 时间:2024/05/30 23:21
A*寻路算法
什么是A*寻路算法?
(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法
A*寻路算法的分析
首先,就点的种类来说,就是三种,开始节点,结束节点,障碍节点
从开始节点开始,每次找到九宫格中的其他节点(非开始的节点),并保存其 F = G + H的值,之后对F的值按照从小到大进行排序
取得排序之后的第一个元素,按照上面的方法进行,直到该元素是结束元素为止
具体的代码
(1) 根据给出的map数组初始化界面
function createMap() { oUl.style.width = cols * (size + 1) +'px'; for(var i = 0; i < map.length; i++) { var oli = document.createElement('li'); oli.style.width = size + 'px'; oli.style.height = size + 'px'; oUl.appendChild(oli); if(map[i] == 1) { oli.className = 'star'; open.push(oli); }else if(map[i] == 2) { oli.className = 'end'; }else if (map[i] == 3) { oli.className = 'obst'; close.push(oli); } } }
(2) 找到对应的九宫格的其他元素
function lookup(newLi) { var result = []; for(var i = 0; i < oLis.length; i++) { //减小查找范围 空白格子 if(filter(oLis[i])) { result.push(oLis[i]); } } for(var j = 0; j < result.length; j++) { //找到九宫格的其他元素 if(Math.abs(newLi.offsetLeft - result[j].offsetLeft) <= size+1 && Math.abs(newLi.offsetTop - result[j].offsetTop) <= size+1 && result[j] != newLi) { open.push(result[j]); result[j].num = f(result[j]); result[j].parent = newLi; } } }; function filter(node) { //过滤函数 for(var i = 0; i < close.length; i++) { if(close[i] == node) { //遇到障碍物 return false; } } for(i = 0; i < open.length; i++) { if(open[i] == node) { return false; } } return true; }
(3)找到下一步的位置(直至结束)
function openFn() { //查找所有要走的路线 newLi = open.shift(); newLi.style.background = 'lightyellow'; newLi.innerText = k++; open.length = 0; lookup(newLi); closeFn(newLi); if(newLi == endLi[0]) { //结束了 return false; } open.sort(function(li1, li2) { return li1.num - li2.num; }); openFn(); }
完整代码地址:https://github.com/vamouszj/A-star/
0 0
- A-star寻路算法
- A星(A-Star)寻路算法
- A-Star(A星)寻路算法
- 【算法复习】寻路算法1 - A星 A star
- A* (A-star A星)寻路算法
- A* (A-star A星)寻路算法
- [Unity] A-Star(A星)寻路算法
- A-Star(A*)算法
- A star 寻路算法实现(C++版本)
- Cocos2d-x 寻路算法之三 A Star
- Unity Game Programming AI(5)A Star寻路算法
- A-Star 算法
- a-star算法
- 【算法】A star algorithm
- A-star算法
- A-STAR算法说明
- A Star算法
- A star算法
- Lua与C
- LeetCode算法题目:Binary Tree Preorder Traversal
- sqoop导入错误
- BZOJ P1930[Shoi2003]pacman 吃豆豆
- Android IPC 进程间通信
- A-star寻路算法
- web开发-java实现读文件修改特定字符之后写入文件-学习笔记七
- VS2013配置ITK4.8.0,VTK6.3.0
- 不用中间变量实现两个数的交换
- 1054 : 滑动解锁 hihocoder & 蓝桥2017模拟
- setFocusable、setEnabled、setClickable区别
- json无法解析的字符
- Android Xposed框架 -- 入门篇
- C++一些知识点的简单总结