方矩阵遍历对具有相同值的相邻单元格进行分组

Square Matrix Traversal grouping adjacent cells with same values

给定样本方阵 (0,1) 如下:

0 1 1 0 0 0
0 0 1 0 0 1
0 0 0 1 0 1
1 0 0 0 0 1
0 1 0 0 0 1
1 0 0 1 0 0

期望的输出将是值等于 1 的单元格组的数量。例如上述矩阵的输出为:

Group #1: (0,1), (0,2), (1,2), (2,3)
Group #2: (1,5), (2,5), (3,5), (4,5)
Group #3: (3,0), (4,1), (5,0)
Group #4: (5,3)

我目前的算法如下:

for i = 0, i < matrix.dimension, i++
   for j = 0, j < matrix.dimension, j++
       if (i,j),(i,j+1),(i,j-1),(i-1,j),(i-1,j+1),(i-1,j-1),(i+1,j),(i+1,j+1),(i+1,j-1) = 1 
           push all pairs of i, j = 1 into a group

但是后来我陷入了如何将 (2,3)(2,5) 分成两组的问题,因为如果我遍历单元格 [=],它们仍在 (i+/-1, j+/-1) 的范围内16=] 例如。感谢您的帮助。提前致谢。

您可以将此矩阵可视化为图形。所以在每个坐标 (x,y),这个点连接到其他 8 个点,即

(x+1, y),(x+1,y-1),(x+1,y+1),(x,y+1),(x,y-1),(x-1,y),(x-1,y+1),(x-1,y-1).

所以你的点数(x,y)会和上面的8点相连。现在你面前有一张图表。

现在 运行 DFS 在此图上,您可以轻松找到一组具有相同值的坐标组合在一起。

希望对您有所帮助!