现在,这个网格略微不同寻常,包括两个物种Vilgax和Arkaknight。 Vilgax很糟糕,可以冻结你一段时间,而 Arkaknight很好,让你从一个地方跳到另一个地方。网格由m行和n列组成。每个单元由一个正整数,负整数或零整数组成。在左上角正好有两个零,网格的右下角正好分别代表Ritik和Kriti的初始位置。正整数表示Arkaknight。它使您能够从单元格跳转到另一个包含网格内任何位置的相同整数。例如 - 包含2的单元格可以让您跳转到网格中包含2的任何其他单元格(如果有)。负整数表示Vilgax。它冻结了一段时间,你不能移动特定的时间单位,由该单元格中存在的整数的绝对值表示。例如,包含-3的单元格会让你在该单元格中冻结3个单位的时间即你不能移动或跳转到任何其他细胞。 Ritik还可以移动到任何共用一个公共墙的单元,即在网格内彼此相邻(顶部,左侧,右侧和底部)。从一个单元格跳到另一个单元格需要一个单位时间。你的任务是告诉Ritik在给定m x n网格时到达Kriti的最小时间单位。输入格式第一行输入包含行数-M。输入的第二行包含列数-N。然后,M行输入分别包含N个整数。
注意:正整数的范围为[1,M * N],包括两个端点,负整数的范围可以从
[-1, -( M * N ) ]
开始。约束1 <= M <= 1000 1 <= N <= 1000
输出格式打印Ritik到达Kriti所用的最短时间。
示例TestCase 1
Input 3
3
0 2 3
-1 2 -3
3 2 0
输出 3
答案 0 :(得分:1)
我们的想法是从输入中构建有向图,并在该图中搜索最短路径。
构建图表
图表找到最短路径,从与左上方网格单元格对应的节点开始,到使用Dijkstra对应于右下网格单元格的节点结束
答案 1 :(得分:1)
我们的想法是从您的输入构建加权有向图并搜索该图中的最短路径。
构建加权有向图
使用 FLOYD WARSHALL算法后,图表找到从对应于左上方网格单元的节点开始到结束于右下方网格单元的节点的最短路径