2014-10-19 57 views
0

我有布爾值的矩陣(5×5):如何找到小區的鄰居在矩陣

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意味着:可以用較少的移動次數到達的單元格,即行間差異和列差異之和必須最小。 因此,例如:

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

我可以使用什麼樣的算法?

+2

可能重複http://stackoverflow.com/questions/1620940/determining-鄰居小區外,二維列表 – Kasramvd 2014-10-19 17:15:50

回答

2

BFS - 搜索直接鄰居,然後搜索每個直接鄰居的直接鄰居,等等......在每個這樣的步驟中,您將搜索比上一步更遠的單元。 也,跟蹤哪些細胞已被選中,這樣你就不再贅述

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