所以我有一个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列表。
非常感谢您的帮助:)
答案 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
,因此它无法再次计数