如何在迷宫中打印从源到目标的BFS路径(或者如何获得第一步)?

时间:2016-02-19 11:19:20

标签: c graph path-finding maze

这是一个与你帮助我很多的question相关的问题。

我的新问题是,有没有办法将找到的路径从source单元格打印到target单元格?或者,有没有办法只从pred获得第一次移动而不重复所有移动?

在另一个问题中我收到的(非常有帮助的)答案中我建议我从targetsource获取路径,这非常有用,但为了改进我的代码I&#39 ; d从sourcetarget的路径。

我的问题是我试图写一个类似流氓的游戏,我必须告诉一个怪物,这将是他的下一步行动,我想迭代所有的pred数组以获得一举一动就是浪费资源。

提前感谢您的帮助。

1 个答案:

答案 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的算法,当它通过利用其目标的知识而没有障碍时加速(收敛更快)。