arrays - 如何检查数组数组中的边界重复项

标签 arrays python-3.x flood-fill

如果我有一个由包含整数的数组组成的数组

arr[0] = [0, 0, 1, 1, 1, 0, -1]    0
arr[1] = [1, 0, 0, 0, 1, -1, 0]    1
arr[2] = [0, 0, 0, 1, 1, -1, 0]    2

          0  1  2  3  4  5   6

例如,我想检查有多少相同的整数在水平和垂直方向上彼此相邻。例如,如果我选择坐标 (1, 2),即 0。我希望它输出数字 8。因为有 8 个连续的零,所有零都彼此相邻。 我怎样才能编写一个完全可以做到这一点的函数?

我在Python中尝试了以下两个函数

print checkLoc(1, 2)

def checkLoc(x, y):
    amt = 0
    n = arr[y][x]
    checkPos(x, y, n)
    return amt

def checkPos(x, y, n):
    amt += 1
    if arr[y - 1][x] == n:
        checkPos(x, y - 1, n)
    if arr[y + 1][x] == n:
        checkPos(x, y + 1, n)
    if arr[y][x - 1] == n:
        checkPos(x - 1, y, n)
    if arr[y][x + 1] == n:
        checkPos(x + 1, y, n)

我希望这能起作用,但事实并非如此。我已经对此进行了一些实验,因为我根本无法弄清楚,所以我希望得到一些帮助。 谢谢。

最佳答案

在您的递归方法中,您缺乏基本情况,并且无法防止下标超出范围。您也没有采取任何措施来阻止多次访问同一位置。以下实现了您似乎试图使用的逻辑,并借助帮助数据结构来跟踪访问了哪些位置。请注意,我将 arr 设为局部变量,因为我不喜欢在没有充分理由的情况下使用全局变量:

def checkPos(arr,visited,i,j,v):
    visited[i][j] = True
    if arr[i][j] != v:
        return 0
    else:
        count = 1 #current position
        if i > 0 and not visited[i-1][j]:
            count += checkPos(arr,visited,i-1,j,v)
        if i < len(arr)-1 and not visited[i+1][j]:
            count += checkPos(arr,visited,i+1,j,v)
        if j > 0 and not visited[i][j-1]:
            count += checkPos(arr,visited,i,j-1,v)
        if j < len(arr[0])-1 and not visited[i][j+1]:
            count += checkPos(arr,visited,i,j+1,v)
        return count

def checkLoc(arr, x, y):
    m = len(arr) # number of rows
    n = len(arr[0]) #number of columns
    visited = [[False]*n for _ in range(m)]
    v = arr[y][x] #value at the position
    return checkPos(arr, visited, y, x, v)

#test:

arr =[[0, 0, 1, 1, 1, 0, -1],
      [1, 0, 0, 0, 1, -1, 0],
      [0, 0, 0, 1, 1, -1, 0]]

counts = [[checkLoc(arr,j,i) for j in range(7)] for i in range(3)]
print('\n'.join(str(row) for row in counts))

输出符合预期:

[8, 8, 6, 6, 6, 1, 1]
[1, 8, 8, 8, 6, 2, 2]
[8, 8, 8, 6, 6, 2, 2]

关于arrays - 如何检查数组数组中的边界重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267441/

相关文章:

javascript - 基于索引数组过滤数组

Python 嵌套字典替换为 none 并追加而不使用 get

带有洪水填充的 C++ 段错误

java - 使用定义的代码从数组中获取字符串

python - (行,列)格式的 Numpy 最小值

python - Python 的 Deoptim 优化器

python - haystack ElasticsearchDocumentStore 无法连接 Elasticsearch

java - UVa-784 错误答案

android - 在 android 中使用 FloodFill 后 Canvas 手指绘图不透明度增加

java - 实例化一个新对象,从参数中获取一个indexoutofbounds,它是一个数组