一个有趣的迷宫

时间:2015-10-07 12:35:24

标签: algorithm data-structures graph dynamic-programming

我们有一个迷宫R X C,其中1 <= R,C <= 500。这个迷宫由-1到100的数字填充。现在,游戏如下:

  

如果方形中有-1,则认为这是一个石块   那个牢房,你不能穿过那个牢房。你可以从   第一列上的任何单元格(当然没有-1)并退出   上一栏中的任何单元格。你可以向上,向下,向右移动。如   你移动,你收集单元格中的数字,除了-1表示一个   大石头放在我们的迷宫里。每个单元格必须访问一次   仅

从左到右的路径是什么,您可以选择最大数字总和?简单 !! Dp可以做魔法,但是......这就是捕捉 - 规则5。

  

如果我们可以到达第一行或最下一行,我们可以离开迷宫。但是之后   发生了两件事:

     

a)我们失去了迄今收集的所有积分。

     

b)我们将迷宫放在同一列中但在相反的单元格中。

例如:考虑3X3迷宫(1指数)。所以,如果我们达到说,(1,2)我们可以从那里退出并失去所有积分并输入(3,2),游戏继续....

现在,我们必须找到maxiumum得分的路径。

我无法看到我们如何通过动态编程来捕捉这种跳跃并回到迷宫中?此外,我们必须得分&#39; 0&#39; 0每次我们这样做。

示例:

考虑迷宫:

-1  4  5  1
 2 -1  2  4
 3  3 -1 -1
 4  2  1  2

回答= 16。

(4,1) - &gt; (4,2) - &gt; (1,2) - &gt; (1,3) - &gt; (2,3) - &gt; (2,4) - &gt; (1,4)

2 个答案:

答案 0 :(得分:1)

运行您拥有的相同DP算法。完成一个列后,检查顶部/底部位置是否可访问(有一条路径可以到达那里并且它们没有被阻止)。

如果一个是可访问的而另一个不是假设您可以使用之前的分数0到达不可访问的那个(基本上再次运行计算但假设前一列的单元格得分为0)。

如果没有人可以访问,那么无事可做。

如果两者都可以访问,因为你在任何地方都得到了正分,所以放弃一些&gt; 0并从0再次开始是没有意义的。

答案 1 :(得分:1)

您应该能够从

获取解决方案列表(不经过-1)
A) Left -> Right
B) Top -> Right
C) Bottom -> Right

然后你还应该能够从(没有-1)

获得路径列表
D) Left -> Top
E) Left -> Bottom

从列表(B)中删除列表(D)中没有连接路径的任何内容。 从列表(C)中删除列表(E)中没有连接路径的任何内容。

然后从A,B,C中选择最高的解决方案。