a星算法中 f值要是有多个相同的值 如何取舍?

codefunb0y 2010-06-01 01:49:34
rt
...全文
633 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuckSucker 2011-06-19
  • 打赏
  • 举报
回复
检测到时探测过的点的时候不是应该 根据G值修改父节点么?
haohao007go 2010-06-29
  • 打赏
  • 举报
回复

什么啊?
codefunb0y 2010-06-01
  • 打赏
  • 举报
回复
谢谢楼上的 我先去试试去 看看效果
fanster28_ 2010-06-01
  • 打赏
  • 举报
回复
OPEN表可以用优先级队列代替,
都一个节点加入时,先判断其是否出现过(判重)
如果出现过,在优先级队列中查找其f值,与当前f值比较,保留较小的,更新hash表
如果没出现,直接加入到优先级队列中

优先级队列的以f值作为优先级,方便每次取最小的f值
codefunb0y 2010-06-01
  • 打赏
  • 举报
回复
谢谢 楼上的
如果我把多次出现的标记了 会对后面的路径选择有影响吗
能把open表中的上次和以前的记录点 都标记吗?
超级大笨狼 2010-06-01
  • 打赏
  • 举报
回复
A* 一般适合搜到就退出,在广度中把f算一下,插入排序队列,标记哪个点经历过了。

多个重复也不会导致问题,但是问题是你要及时标记哪个点访问过了。
codefunb0y 2010-06-01
  • 打赏
  • 举报
回复
哦 谢谢 我还是不太明白 本人菜鸟
优先级队列的话 还是以f值为优先级的标准吗
fanster28_ 2010-06-01
  • 打赏
  • 举报
回复
死循环是因为你没有判重

简单的时间可以用优先级队列来存f
用hash表来判重(出现过的状态)
codefunb0y 2010-06-01
  • 打赏
  • 举报
回复
我是选最后出现的最小值 可是经常弄得算法死循环 楼上所说的优先队列是什么原理?
fanster28_ 2010-06-01
  • 打赏
  • 举报
回复
相同的不能舍,当然选最小的随便选哪个都可以

可以用优先级队列简单实现
codefunb0y 2010-06-01
  • 打赏
  • 举报
回复
补充:多个相同的最小值f

33,024

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧