字太多了 直接放笔记的图片吧,如有不对请指正

A算法和A*算法都适用
1、用初始节点初始化搜索图G (动态变化),将初始节点放入open表(还没有扩展的节点)中,然后初试closed(已经扩展完成的节点)表赋空NULL
2、如果open表不为空进入循环
    2.1 将open表中的第一个元素的指针赋给临时变量n表示当前遍历的节点,然后将当前节点n的指针假如到closed表表示扩展完成
    2.2 如果当前节点n是目标节点,任务完成 结束算法
    2.3 扩展当前节点n
        使用临时集合M存储n后面的若干个(≥1)子节点m,且m不可以是n的祖先
        将解图G并上M,表示前一轮循环定义的解空间+当前节点所能得到的可能的后续节点
    2.4 判断M中的节点m,
        如果m不属于closed也不属于open则建立m——>n的指针,并将m节点加入到open表中
        如果m属于open,则考虑是否修改m的指针,看n节点下m的f(n)和open表中m节点f(n)的大小
        如果m属于closed,则考虑是否修改m以及G中后裔的指针
    2.5 重新排列open表中的节点(根据估价函数)
下面是例子

图上面边和点的值在最后一张图有解释

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐