附上全文连接:
[Algorithm]Maze Prim算法与A*寻路算法(上)
[Algorithm]Maze Prim算法与A*寻路算法(中)
[Algorithm]Maze Prim算法与A*寻路算法(下)
文章中的所有源码下载链接附在“[Algorithm]Maze Prim算法与A*寻路算法(上) ”文章中。
接着上一篇来讲,这篇主要讲的是A*寻路算法。
首先讲一下算法的大致流程:
1. 创建两个列表,一个用于存放已访问的节点,一个存放未访问的节点。
2. 将开始节点存放如未访问节点列表中,然后开始如下循环。
——1.如果未访问节点列表不为空。
————1.取得未访问列表中的权值最优节点,并设置为当前节点。
————2.从未访问列表中移除当前节点,并将当前节点存入已访问节点列表。
————3.如果当前节点为结束节点,则寻路完成,返回查找到的路径。
————4.否则取当前节点的周边节点,并做如下判断。
——————1.该节点不可移动(墙)或已经在已访问列表中时退出这次循环,进行下一次循环。
——————2.该节点不在未访问列表中或新计算的权值小于原有权值则存入未访问列表中或更新权值。
本节跟上一节有关联,需要用到上一节介绍的“WallInfo”和“Maze”类。这些如有不懂请看上一节或源码。
我们需要定义寻路用的节点类。里面包含了权值、父节点等信息。
public class Node
{
public WallInfo wallInfo { get; set; }
public int valSrc { get; set; }
public int valDis { get; set; }
public int valSum { get { return valDis + valSrc; } }
public Node parent { get; set; }
public Node(WallInfo info)
{
this.wallInfo = info;
this.valDis = 0;
this.valSrc = 0;
this.parent = null;
}
public Node() : this(null)
{
}
public override string ToString()
{
return "[Node:valSrc=" + valSrc + " valDis" + valDis + " valSum" + valSum + " wallInfo="<