[Algorithm]Maze Prim算法与A*寻路算法(下)

本文详细介绍了A*寻路算法的实现过程,包括创建已访问和未访问节点列表,从未访问列表选择权值最小节点,判断并更新周边节点等步骤。文中提到算法与上文的Prim算法有关,使用了特定的节点类和权值计算。文章还鼓励读者对代码进行优化和讨论。
摘要由CSDN通过智能技术生成

附上全文连接:
[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="<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值