我有一个布尔值的矩阵(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
我可以使用哪种算法?
答案 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