如何检查二维数组中的每个元素是否连接在一起

How to check if every element in a 2D Array are connected together

问题在标题里。我有一个二维数组:

array = [
[0, 0, 1, 0, 1],
[0, 0, 1, 0, 1],
[1, 1, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0]
]

如何检查此示例中的每个元素“1”是否都作为相邻元素横向或横向连接在一起。在这个例子中,函数应该 return TRUE 因为所有的 1 都连接在一起。对比:

array = [
[0, 0, 0, 1, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[1, 1, 0, 0, 0],
[1, 1, 0, 0, 0]
]

这应该 return FALSE,因为它们是 1 之间的分界线,并不是所有的都是邻居。

我最初的想法是遍历数组并检查是否有任何相邻项为 1。然而,这是行不通的,因为两个元素可以彼此相邻但远离组的其余部分。非常感谢任何帮助。

您可以使用 BFS or DFS

这些探索算法可帮助您发现与起始节点相连的所有节点。

“技巧”是将您的矩阵视为一个图形,其中:

V = { (i,j) | a[i][j] == 1} (informally, all locations where there is 1 in the matrix
E = { ((i1, j1), (i2, j2)) | (i1, j1), (i2, j2) are adjacent }

然后,找到一个a[i][j] == 1的地方,并从那里开始一个BFS或DFS来发现所有可达的节点。

完成后,再次迭代矩阵,看看是否每个 a[i][j] == 1 元素都被发现了。

祝你好运!

此问题的正确答案是计算所有为 1 的元素,然后找到任何为“1”的元素,然后使用计算 1 的数量的填充算法。如果两个值相等则答案为真,否则为假。

https://en.wikipedia.org/wiki/Flood_fill