注意:不要提及用於矩陣創建的Numpy,因爲我無法使用該特定庫。確定矩陣中的所有元素是否都以Python連接
我一直在研究一個Python程序,它檢查一個電路板內的所有元件(電路板尺寸是否可以改變)是否連接在一起。例如,該電路板的元件都被連接:
board = [
[1, 0, 0, 1],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
]
然而,當前的程序我有故障時,如某些特定情況下返回相反布爾值。我應該做些什麼呢?
這是當前代碼我有:
#Should return False, returns False
board1 = [
[1, 0, 1],
[1, 0, 1],
[0, 0, 1]
]
#Should return True, returns False
board2 = [
[1, 0, 1],
[1, 0, 1],
[0, 1, 0]
]
#Should return True, returns True
board3 = [
[0, 1, 0],
[1, 1, 1],
[0, 1, 0]
]
#Should return True, returns False
board4 = [
[0, 0, 0, 1],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
]
def check(board):
adjacent_total = []
for x in range(len(board)):
for y in range(len(board[0])):
adjacent = []
if board[x][y] == 1:
for i in range (x-1, x+2):
for j in range (y-1, y+2):
if i == x and j == y:
continue
if i == len(board) or j == len(board[0]):
break
if i >= 0 and j >= 0:
if board[i][j] == 1:
adjacent.append((i,j))
else:
adjacent = None
adjacent_total.append(adjacent)
for i in adjacent_total:
if i is None:
continue
elif len(i) == 1:
return False
return True
print(check(board1))
print(check(board2))
print(check(board3))
print(check(board4))
你如何定義「連接」?而「左上角」元素總是= 1? – jedwards 2015-04-04 18:18:34
這個算法似乎只是檢查每個節點是否有多個鄰居。相反,您應該使用DFS並檢查每個節點是否被訪問。 – kalhartt 2015-04-04 18:19:55
@jedwards連接,因爲在所有元素鏈接,至少有一個鄰居。不,左上角的元素並不總是1.只要連接,電路板的元件可以放置在任何地方。 – Vicyorus 2015-04-04 18:26:33