这是一个与你帮助我很多的question相关的问题。
我的新问题是,有没有办法将找到的路径从source
单元格打印到target
单元格?或者,有没有办法只从pred
获得第一次移动而不重复所有移动?
在另一个问题中我收到的(非常有帮助的)答案中我建议我从target
到source
获取路径,这非常有用,但为了改进我的代码I&#39 ; d从source
到target
的路径。
我的问题是我试图写一个类似流氓的游戏,我必须告诉一个怪物,这将是他的下一步行动,我想迭代所有的pred
数组以获得一举一动就是浪费资源。
提前感谢您的帮助。
答案 0 :(得分:0)
现在您已经绘制了路径,请在怪物旁边寻找下一个*
:
if (G->nodes[T.row + A][T.col + B] == '*') {
//kept for my sanity: pred[G->T.row*G->col + G->T.col]
doMove(); //don't forget to change the '*' into 'T', then the old spot to ' '
}
要进行提升,请检查A = -1; B = 0
。要进行下移,请检查offsetA = 1; offsetB = 0
。右:A = 0; B = -1
,左:A = 0; B = 1
。
因为您的地图非常简单并且不会分支很远,所以我建议您选择更快的算法。 BFS倾向于搜索最近的路径,并且对于长路径不是非常有效。 Djikstra是BFS的更好实现,允许将成本分配给边缘。 A *是在游戏中使用的最佳搜索,因为它是Djikstra的算法,当它通过利用其目标的知识而没有障碍时加速(收敛更快)。