【问题标题】:I'm stuck with this puzzle not knowing how to go about this. It will be helpful if anyone gives me an idea how to think or solve this我被这个难题困住了,不知道该怎么做。如果有人告诉我如何思考或解决这个问题,那将会很有帮助
【发布时间】:2018-03-09 06:34:40
【问题描述】:

Ritik - 白日梦者 Ritik 是一个有梦想的人,他日夜不停地做梦,想知道空间和时间、科幻等等。今天又是一天,他梦想着一个银河网格,在那里他应该拯救他的朋友Kriti

现在,这个网格有点不寻常,由两个物种 Vilgax 和 Arkaknight 组成。 Vilgax 很糟糕,可以让你冻结一段时间,而 Arkaknight 很好,可以让你从一个地方跳到另一个地方。 Grid 由 m 行和 n 列组成。每个单元格由一个整数组成,正数、负数或零。正好有两个零,一个在网格的左上角,另一个在右下角,分别代表 Ritik 和 Kriti 的初始位置。正整数表示 Arkaknight。它使您能够从一个单元格跳转到另一个在网格中的任何位置包含相同整数的单元格。例如 - 一个包含 2 的单元格可以让您跳转到网格中包含 2 的任何其他单元格(如果有一个)。负整数表示 Vilgax。它会冻结一段时间,即您无法在该单元格中存在的整数的绝对值表示的特定时间单位内移动。例如,包含 -3 的单元格会使您在该单元格中冻结 3 个时间单位即您不能移动或跳转到任何其他单元格。 Ritik 还可以移动到共享公共墙的任何单元格,即网格内彼此相邻(顶部、左侧、右侧和底部)。从一个细胞跳到另一个细胞需要一个单位的时间。你的任务是在给定 m x n 网格的情况下,告诉 Ritik 到达 Kriti 所需的最小时间单位。输入格式 输入的第一行包含行数 - M。输入的第二行包含列数 - N。然后输入 M 行,每行分别包含 N 个整数。

注意:正整数的范围为 [ 1, M * N ](含),负整数的范围为 [-1, -( M * N ) ](含)。约束1 <= M <= 1000 1 <= N <= 1000 输出格式打印Ritik 到达Kriti 所用的最小时间单位。

示例测试用例 1

Input 3 
3 
0 2 3 
-1 2 -3 
3 2 0 

输出 3

【问题讨论】:

  • 这真的很难理解。请提供一些插图、您尝试过的代码等。另请参阅stackoverflow.com/help/how-to-ask
  • 我不知道如何解决这个难题..这就是我正在寻求帮助的..请在下面找到这个难题的链接,它可能会帮助您更好地理解... brainly.in/question/2827213

标签: algorithm graph tree


【解决方案1】:

我们的想法是根据您的输入构造一个有向图,并在该图中搜索最短路径

构造图

  • 为每个网格单元 x 构建一个节点 N(x)。
  • 对于共享一个正数或彼此相邻的两个网格单元 x 和 y,通过构建两个节点来连接两个节点 N(x) 和 N(y) 关联成本为 1 的边 E(N(x), N(y)) 和 E(N(y), N(x))。
  • 对于带有负数 k 的网格单元 x 添加 |k|为 N(x) 的所有出边 E(N(x), N(y)) 的成本。

一旦你有了图表,例如使用Dijkstra,找到从对应于左上网格单元的节点到对应于右下网格单元的节点的最短路径

【讨论】:

  • "对于两个共享正数的网格单元 x 和 y,构建两条边 E(N(x), N(y)) 和 E(N(x), N(y))相关成本 0。”我认为这里的相关成本将是 1。谢谢你的想法。
  • 是的,这在问题中并不清楚,但在检查了示例后我发现了这一点。
【解决方案2】:

我们的想法是根据您的输入构造一个加权有向图,并在该图中搜索最短路径。

构造加权有向图

  • 为每个网格单元 x 构造一个节点 N(x)。
  • 对于共享一个相同正数或者是 彼此相邻连接两个节点 N(x) 和 N(y) 通过 建立两条边 E(N(x), N(y)) 和 E(N(y), N(x)) 重量 1。
  • 对于带有负数 k 的网格单元 x 添加 |k|到重量 N(x) 的所有出边 E(N(x), N(y))。 即|k|+1,其中 1 表示移动。

一旦你有了图表,使用 FLOYD WARSHALL ALGORITHM

找到从对应于左上网格单元的节点到对应于右下网格单元的节点的最短路径

【讨论】:

  • 为什么选择 Floyd Warshall?给定了起点和终点节点,因此您不需要所有对的最短路径。
猜你喜欢
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2019-05-22
  • 2022-12-04
  • 2022-11-10
  • 2021-03-07
  • 2022-11-14
  • 1970-01-01
相关资源
最近更新 更多