迷宫中最短路径与健康损失

时间:2018-05-13 19:31:43

标签: algorithm computer-science shortest-path dijkstra

假设你有一个由2D矩阵表示的地牢。您有一个起点S(x1,y1)和一个终点E(x2,y2)。在此过程中,一些细胞中有一个数字,从您的健康评分中减去。其他细胞是你无法通过的障碍。你从5个健康点开始,你需要找到从S到E的最短路径,你不会在途中死亡。

我知道Dijikstra习惯于找到最短的路径。但在这种情况下,最短路径可能是您沿途死亡的路径。你怎么找到你不死的最短路径?请注意,只要你最后还活着,就没有优势来完成具有更多健康点的比赛。

2 个答案:

答案 0 :(得分:1)

这类问题的标准方法有时被称为“图层分层”。你制作原始图形的5个副本(在这种情况下编号为0到4),在图形 n 中获得 v 中的椎骨意味着到达原始图形中的相应顶点 n 死亡后的图表。

如果原始图形中的边缘花费你的生命,那么它将每个图形中的顶点 i 连接到图形 i + 1 中的顶点,否则它像原始图像一样连接图形的相同版本中的顶点。

构建此图后,使用Dijkstra算法找到任意层中终端顶点的最短路径。

答案 1 :(得分:0)

只需使用A *,而且相应地减少每次移动的生命值,但要考虑每次移动会导致健康状况达到0,就好像这种情况是一个障碍案例。

编辑:为方便起见,我会附上指向A *的文章的链接:thisthis以及this

解释性说明:看起来可能很棘手,A *首先尝试贪婪,然后回溯并最终找到最短的路线。在这里,我并不是说案件永远被标记为障碍,而只是在当地被认为等同于当前选择的障碍,如果它导致死亡。找到第一个路径后,此扩展A *不应该停止,而是在决策树中使用此路径的长度作为上限和回溯,检查所有打开的路径。它会起作用。