首页 > 解决方案 > C中的2D数组分组1

问题描述

1 和 0 的二维数组。如何用唯一的数字标记每组 1?我在这个问题上停留了一段时间。1可以垂直、水平和对角分组。你怎么能解决这个问题?例如,

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

应该转化为

0 0 x x 0
0 x x 0 0
0 0 0 0 y
0 0 0 y 0

x,y可以是任何唯一的数字。

欣赏它。这是我到目前为止的迭代:https ://i.imgur.com/oCmYC02.png 但结果有点偏离,因为它只检查直接相邻的 1:https ://i.imgur.com/DAtTBmM .png 有人知道如何解决这个问题吗?

标签: arrayscgrouping

解决方案


我会这样做:

  1. 逐行、逐列依次扫描二维数组
  2. 如果找到 1,则使用洪水填充算法的变体,从该起点开始向 8 个方向而不是 4 个方向移动(参见https://en.wikipedia.org/wiki/Flood_fill上的普通 4 方向算法),因为您每次使用新的填充数时,都有带有“y”的对角线示例。
  3. 重复 1 和 2,直到没有更多的人离开。

推荐阅读