如何在矩阵中查找单元格邻居

时间:2014-10-19 17:02:19

标签: python c algorithm matrix

我有一个布尔值的矩阵(5x5):

matrix = [[False for x in range(5)] for x in range(5)]
matrix[0][3] = True
matrix[2][2] = True

F F F T F
F X F F F
F F T F F
F F F F F
F F F F F

给定索引,我需要找到值为True的close cell。 更接近意味着:可以通过较低移动次数到达的单元格,即行差异和列差异之间的差值必须最小。 所以,例如:

row, column = find(row=1, column=1)
# row = 2
# column = 2

我可以使用哪种算法?

2 个答案:

答案 0 :(得分:2)

BFS - 搜索直接邻居,然后搜索每个邻居的近邻等等......在每个这样的步骤中,您将搜索比前一个更远的单元格。步。 另外,要跟踪已经检查过哪些单元格,这样就不要重复了

答案 1 :(得分:0)

尝试下面给出的代码:

matrix = [[False for x in range(5)] for x in range(5)]
matrix[0][3] = True
matrix[2][2] = True

stack=[]


def find(rc):  # argument rc is a (row,col) tuple like (1,1). Don't pass it a 1,1 
    global stack
    r=rc[0] 
    c=rc[1]
    if (c+1 < 5) and (matrix[r][c+1]==True):
        print r,c+1
        stack=[]
        return
    if (c-1 > -1) and (matrix[r][c-1]==True):
        print r,c-1
        stack=[]
        return
    if (r+1 < 5) and (matrix[r+1][c]==True):
        print r+1,c
        stack=[]
        return
    if (r-1 > -1) and (matrix[r-1][c]==True):
        print r-1,c
        stack=[]
        return
    if r+1 < 5: stack.append((r+1,c))
    if r-1 > -1: stack.append((r-1,c))
    if c+1 < 5: stack.append((r,c+1))
    if c-1 > -1: stack.append((r,c-1))
    find(stack.pop(0))

>>> find((1,1))
2 2
>>> find((0,0))
0 3
>>> find((4,0))
2 2
>>> find((4,4))
2 2
>>> find((0,4)) 
0 3