Welcome

首页 / 软件开发 / Silverlight / Silverlight实现A*寻径算法

Silverlight实现A*寻径算法2012-07-10 博客园 猪笨无罪建议在新窗口中查看:

http://www.dotnet.pp.ru/silverlight/SilverlightAStar.html

花了几天的时间研究A*算法,总算是搞出来了。放上来给大伙儿瞧瞧。

点击“StartPoint”指定开始点,点击“EndPoint”指定目标点。点击“Impediment”指定不可通过区域。

GridSize设置节点大小,节点越小,容器中的节点就越多,填好后点Set保存设置。

Clear清除所有。

StartFindPath 开始寻径

Completed Tim 显示寻径所耗时间。

Diagonals 设置是否可以斜着走。

自我感觉速度不错。

下面说说算法的大致流程

首先定义两个列表

private List<PathNote> openedList = new List<PathNote>(); //开启列表

private List<PathNote> colsedList = new List<PathNote>(); //关闭列表

开启列表中存储待检测节点。关闭列表中存储已检测节点。

从开始点开始,拿到开始点周围4或8个方向的节点,把他们添加进开启列表中。

G等于当前节点的父节点加上10或者14,水平或垂直方向加10,对角线方向加14

H等于当前节点的X的差与目标的的X的差、Y与目标点Y的差的绝对值的和。

F = G + H。

把当前节点从开启列表中删除。并添加进关闭列表中。以“F”值为依据从小到大排序,把F值最小的节点拿出来,重复以上过程。

大致流程是这样的。细节方面已经有一篇文章写的非常详细,在此也没有必要赘述了。

传送门:http://data.gameres.com/message.asp?TopicID=25439