在A寻路中使用二叉堆
2009-10-15 11:57:46 来源:WEB开发网核心提示:现在,它只是个F值的列表,在A寻路中使用二叉堆(3),而且已经被正确安排,但是我们忽略了一个重要的元素,我们把它的大小定为(地图宽 x 地图高),我们同时存储节点的x和y坐标在类似的一维数组中,是的,我们有一系列的F值按顺序保存在堆里
现在,它只是个F值的列表,而且已经被正确安排。但是我们忽略了一个重要的元素。是的,我们有一系列的F值按顺序保存在堆里,但是我们没有他们代表哪一格的任何线索。基本上,我们只是知道10是堆中最低的F值。但那指的是那个格子?
为了解决这个问题,我们必须改变数组中元素的值。我们不储存排序好的F值,取而代之的是保存关联到地图网格的唯一标志。我的方法是为每个新加入堆的元素创建一个唯一ID叫做squaresChecked。每次往开启列表中添加新元素,我们给squaresChecked增加1,并把它作为列表中新元素的唯一ID。第一个添加进列表的是#1,第二个是#2,依此类推。
最后,我们把具体的F值存储在单独的一维数组中,我把它叫做 Dcost()。和开启列表相同,我们把它的大小定为(地图宽 x 地图高)。我们同时存储节点的x和y坐标在类似的一维数组中,叫做 openX() 和 openY()。看起来就像下面的图:
更多精彩
赞助商链接