A算法和A*算法详解
·
字太多了 直接放笔记的图片吧,如有不对请指正
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表中的节点(根据估价函数)
下面是例子
图上面边和点的值在最后一张图有解释
更多推荐
已为社区贡献1条内容
所有评论(0)