最短路径具有破坏设定数量的障碍物的能力

时间:2013-03-31 18:32:15

标签: path-finding dijkstra shortest-path

我有一个编程任务,可以在“扇区”中找到从START到GOAL的最短路径。您可以将Sector可视化为2D节点阵列,其中一个节点为START,另一个节点为GOAL。所有其他节点都是FLAT或HILL。你不能越过山丘。例如:

  0123456789
 |----------| {S = START, G = GOAL, " " = FLAT, # = HILL}
0|S         |
1|#####     |
2|          |
3|          | 
4|          | 
5|          | 
6|          | 
7|          |
8|   #######|
9|         G|
 |----------|

好的,所以我实现了Dijkstra的算法来提出从S到G的最短路径。但还有一个我无法弄清楚的问题,我会很感激一些建议。如果它让我们找到一条较短的路径,我们将获得5枚炸弹炸毁希尔斯。因此对于我发布的示例部门,我想使用2个炸弹来获得这样的路径:

  0123456789
 |----------| {S = START, G = GOAL, " " = FLAT, # = HILL, + = PATH}
0|S         |
1|#+###     | Blasted away HILL @ [1][1]
2|  +       |     4 bombs remaining
3|   +      | 
4|    +     | 
5|     +    | 
6|      +   | 
7|       +  |
8|   #####+#| Blasted away HILL @ [8][8]
9|         G|     3 bombs remaining
 |----------|

用于测试程序的扇区是100x100并且有很厚的“山脉”,所以只有5枚炸弹,你可以直接射向目标或任何东西。

有关如何智能地使用炸弹时如何计算的想法?现在,我有一个临时实施,只是说“如果您当前正在查看的节点是一个山丘并且您有炸弹,那么就会爆炸”。显然,这不会削减它,但我想不出如何正确地做到这一点。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我假设在你的第一个解决方案中你有一个图形连接,你有一个只连接Flat空间的图形。我建议你为每个希尔创造高成本优势。每个进入希尔的边缘成本为例如100000单位。所有其他边缘成本为1个单位(仅作为示例)。

在您的第一个示例中,您可以在(0,0) -> (0,1)之间有一个优势,成本为100000.

因此,如果累计成本大于或等于(bombs + 1)*100000,您将需要停止搜索(在Dijkstra中,如果搜索相邻节点的成本)。

基本思想是你的算法会尽量降低成本,使用炸弹是非常昂贵的。当然,最短的路径将找到炸弹最少的路径。如果你在最小路径上有5个炸弹,那么费用将是500000加上穿越平坦地形的费用。