【问题标题】:How to compute how many elements are adjacent in a 2D list [closed]如何计算二维列表中相邻的元素数量[关闭]
【发布时间】:2026-02-02 20:55:02
【问题描述】:

所以我有一个 0 到 3 之间整数的二维列表。我需要计算相同的相邻节点的最大数量,但我不知道如何计算。相邻节点是在基地周围 3x3 正方形中具有相同值的另一个节点。

例子:

[
 [1, 0, 0, 1]
 [0, 1, 0, 0]
 [1, 1, 1, 0]
]

应该返回 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 列表。

非常感谢您的帮助:)

【问题讨论】:

  • 你的示例输出是 5 和 1 (让我们在 (1,1) 中说的节点)和 4 一个投降?你有什么时间限制?您是否在O(n*m)(二维数组大小)中尝试过蛮力
  • 0,0 有一个相邻的 1(1,1) 有另一个周围的 1 等等,几毫秒就可以了
  • 我还是不明白 - 请您编辑问题并解释为什么输出为 5?
  • 做到了@dWinder
  • "Can Someone Help Me?" is not a valid SO question。这通常表明您需要的是与当地导师相处或完成教程,而不是 Stack Overflow。

标签: python algorithm list


【解决方案1】:

我会建议在根据调整值进行搜索的同时检查每个单元格。您可以用-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 时,它就不能再次计数了

【讨论】:

    最近更新 更多