我有一个1024x1024数组,二进制值为0或1,由噪声算法生成。1总是分组在一起。想象一下,它就像一个由0组成的平面和由1组成的岛屿。
我想把任何一个1的孤岛提取到一个新的列表中(我碰巧使用的是C#,但任何容器都可以)。如果一个岛屿的3x3个相邻点都不与另一个岛屿重叠,则认为该岛屿是独立的。
这听起来可能是一个常见的问题,但我不知道要搜索的任何候选算法的名称。
我现在正在通过检查每一个点和它的邻居来做这件事。
有没有更快的方法来做到这一点?
谢谢
发布于 2015-01-04 19:25:16
对每个"1“执行Flood-Fill操作,以获取它所属的”岛“。对所有的1重复。复杂度与矩阵的大小成线性关系。
有效的伪代码可以是:
1. set <- new Set
2. for each cell (i,j) in matrix, if matrix[i][j] == 1:
2.1. set.add(i,j)
3. while set is not empty:
3.1. island <- floodFill(i,j) // start flood fill from i,j
3.2. set.removeAll(island) //remove already found 1's
3.3. yield islandhttps://stackoverflow.com/questions/27764957
复制相似问题