Примечание: не упоминайте 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))
Как вы определяете "connected"? И является ли «верхний левый» элемент always = 1? – jedwards
Этот алгоритм, похоже, просто проверяет, имеет ли каждый узел более одного соседа. Вместо этого вы, вероятно, должны использовать DFS и проверить, что каждый узел посещается. – kalhartt
@jedwards Подключено, как и во всех элементах, связанных, по крайней мере, одним соседом. И нет, верхний левый элемент не всегда 1. Элементы платы могут быть размещены в любом месте, если они подключены. – Vicyorus