如何计算2D列表中相邻的元素数量

时间:2019-01-28 20:04:38

标签: python algorithm list

所以我有一个2D列表,其整数在0到3之间。我需要计算相同的相邻节点的最大数量,但是我不知道怎么做。相邻节点是在基部周围3x3平方中具有相同值的另一个节点。

示例:

http://localhost/8080/orbeon/home/

应返回5,因为(0,0)有一个相邻的1(1,1)。 (1,1)具有3个相邻的1 [[(2,0),(2,1),(2,2)]。这些合计为5。 (0,3)没有相邻的1,因此分数为1,小于5,因此我们返回最高分数5。

该功能必须使用10x10 2d列表。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

我建议您在检查每个单元格的同时,根据调整值扩大搜索范围。您可以用-1标记已访问的单元格。

考虑以下伪代码:

int getAdjNumber(x, y, matrix):
    val = matrix[x][y] // save current val
    matrix[x][y] = -1
    minX = max(0, x-1), maxX = min(matrix.len, x+1), minY = max(0, y-1), maxY = min(matrix.len, y+1) 
    sum = 1 // as current cell
    for i = minX to maxX
        for j = minY to maxY
            if matrix[i][j] == val
                sum += getAdjNumber(i,j, matrix)
    return sum

主要是:

max = 0
for each i,j :
    if matrix[i][j] != -1
        max = max(max, getAdjNumber(i,j, &matrix)) //sending as ref so the original matrix will be modify 

现在max将成为您的输出。

请注意,此方法还支持更多值,而仅是1或0-如您的帖子所述,它们可能是0-3。

时间复杂度为O(n^2)-2D数组的大小-由于您计算的每个单元格都更改为-1,因此它无法再次计数

相关问题