【发布时间】:2021-07-02 18:50:09
【问题描述】:
我有一个带有0 和1 的二进制矩阵,并且给定整数K >=0。现在我想找到与值为1 的单元格最大距离为K 的所有可能单元格,并将它们标记为某个字母“x”。
单元格 A[5][2] 和 A[1][4] 之间的距离为 |1-5|+|4-2|=6。
例子:
一个 8x8 矩阵和 K = 2,在 (2,2) 和 (6,6) 处具有值 1 的单元格
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0
输出:
0 0 x 0 0 0 0 0
0 x x x 0 0 0 0
x x 1 x x 0 0 0
0 x x x 0 0 0 0
0 0 x 0 0 0 x 0
0 0 0 0 0 x x x
0 0 0 0 x x 1 x
0 0 0 0 0 x x x
这是我正在尝试的逻辑:
找到 1 的单元格位置,并找到从行 -k 到给定列的 +k 的所有单元格。类似地,查找具有给定行和列的所有单元格,范围从 -k 到 +k。所以对于上面的例子,对于(2,2),基于我的逻辑的单元格是(0,2),(1,2),(2,2),(3,2),(4,2)然后( 2,0) , (2,1) , (2,2) , (3,2), (4,2)。
但我无法理解如何获取 (2,2) 周围的剩余单元格,即 (1,1), (1,3) 和 (3,1) , (3,3)。
Matrix is of size m rows and n cells in range 1 to 500
K range is 1 to 1000
【问题讨论】:
-
也许你可以把它想象成一个面具。如果你用 x 和 y 替换所有数字,IMO 会更容易看到你需要做什么
-
用数学术语给出一个解决方案,如果你从感兴趣的位置减去迭代索引,那么绝对值不应超过
radius(作为整数)。这基本上是一个曼哈顿距离计算。 -
你了解性能吗?
-
@oleg.cherednik,我现在添加了 K 和矩阵的范围