【问题标题】:An interesting maze一个有趣的迷宫
【发布时间】:2015-10-07 12:35:23
【问题描述】:

我们有一个迷宫 R X C,其中 1

如果正方形中有-1,则假设它是一个石块 那个细胞,你不能穿过那个细胞。你可以从 第一列上的任何单元格(当然没有-1)并退出 最后一列的任何单元格。您可以向上、向下、向右移动。作为 你移动,你收集单元格中的数字,除了-1,它表示一个 大石头被放置在我们的迷宫中。每个单元格必须访问一次 仅限。

从左到右可以选择最大数字总和的路径是什么?简单的 !! Dp 可以施展魔法但是……这里有一个问题——规则 5。

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

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

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

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

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

我无法看到我们如何通过动态编程捕捉这种在迷宫中跳出和返回的过程?另外,我们每次都得打'0'。

例子:

考虑迷宫:

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

回答 =16。

(4,1) -> (4,2) -> (1,2) -> (1,3) -> (2,3) -> (2,4) -> (1,4)

【问题讨论】:

  • @ergonaut ,在上面的示例中: (4,2) -> (1,2) 使我们失去所有收集的分数,因此当我们达到 (1,2) 时,我们的分数为 '0' .否则,如果我们只考虑 (4,1) -> (4,2) 我们将得到 (4+2) =6 的分数。
  • 格式化迷宫会有帮助。
  • 我看不出“规则 5”如何阻碍您的一般 DP 方法。只需添加一个条件来处理这种情况。
  • 我还是没看出来你是怎么得16的。等你再进去,我加起来才14。
  • @ergonaut ,从 (1,2) 开始,如上述路径 = 4 +5+2 + 4+1 =16

标签: algorithm data-structures graph dynamic-programming


【解决方案1】:

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

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

如果没有可访问,则无事可做。

如果两者都可以访问,因为您在任何地方都有正分数,所以放弃 >0 并再次从 0 开始是没有意义的。

【讨论】:

  • 它不仅仅是 dp 。我必须考虑从第一列到第一行和最后一行的边界单元格的可访问性,因为 b/t 中有石块挡住了我们的去路。然后只有我可以决定是否必须考虑某些给出最大答案的单元格。如何捕捉这一切?
  • 每个单元格应该包含一个数字 >0 如果它可以从第一列以某种方式访问​​,或者 -1 如果它被阻止或无法到达该单元格。所以你不需要考虑是否有路径,它将被编码在答案中(如果最后一列的所有单元格在你的dp之后都是-1,则没有路径)。
  • 是可能的,请提供一个伪代码+基本条件,因为我没有得到它。
  • 当然,给我看看你有什么,我会告诉你需要添加什么。
【解决方案2】:

您应该能够从

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

那么你也应该能够从(不带-1)获取路径列表

D) Left -> Top
E) Left -> Bottom

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2022-06-13
    • 2020-06-14
    • 1970-01-01
    相关资源
    最近更新 更多