最好的路径算法,同时避免移动敌人?

时间:2016-01-28 13:03:54

标签: algorithm graph nodes vertex

我有一个一般的图表/路径查找问题,我有一个面试。

假设您正试图进入2D图形上的特定节点,并且有一些敌方单位正在横穿图形的节点,搜索您:最大化您到达机会的最佳方法是什么没有遇到敌方单位的目标?

我很好奇最好的算法或处理这个的一般方法。

P.S:你知道敌人的位置在哪里

1 个答案:

答案 0 :(得分:1)

假设你想做一个处于危险迷宫中的人会做的事情:只要你一个敌人,就继续逃跑,这是一个简单的想法:

  1. 在整个图表上从目标开始运行广度优先搜索,以存储每个节点中目标的距离。在这一步中,忽略敌人。当然,假设您的图表中有一些距离度量。否则,只计算bfs期间的节点数量就可以用于某些应用程序。同时保持最后一个节点到目标的距离,让我们称这个数量为 maxdist

  2. 从每个敌人向所有方向进行“小”宽度搜索。很小,因为你在 k 的距离之后停止了这一点,其中 k 是你想要远离敌人的图形节点的数量或其他一些合适的指标(这代表了“的看到”)。在这个bfs中执行类似的操作:存储敌人所在的敌人的距离,将其表示为 d_i ,用于任意节点 i 。在此bfs中,您通过 maxdist + k - d_i 覆盖节点 i 中目标的距离。请注意,此数量始终至少与 maxdist 一样高。在此步骤中,您需要注意如何在另一个敌人写入时更新此节点 i (保留较大的值)。

  3. 现在,在每个时间步中,您选择邻近节点与目标距离最近的一个节点作为下一个节点。由于与敌人“靠近”的节点总是至少和maxdist一样昂贵,所以你会自动避开敌人。如果你被两边的敌人逼入绝境,你将自动停留在两者之间的中间位置,希望尽可能长时间让他们中的一个转身。

    这可能不一定能最大化你的机会,特别是如果你能对敌人的运动做出预测的话。此外,这表现为“愚蠢”,因为即使你无法通过它,直到它“看到”它,它会转向它。

    但这是一种通用的方法,甚至可能是最好的方法,特别是如果你不能从太远的地方看到敌人,如果你没有关于他们的动作的信息,但是你有一张地图可以看到你的位置目标是在哪里。