Uwaga: Nie wspominaj o Numpy dla tworzenia macierzy, ponieważ nie mogę użyć tej konkretnej biblioteki.Ustal, czy wszystkie elementy macierzy są połączone w Pythonie
Pracuję nad programem w języku Python, który sprawdza, czy wszystkie elementy wewnątrz tablicy (rozmiar tablicy może się zmienić) są połączone. Na przykład, elementy tego forum są wszystkie podłączone:
board = [
[1, 0, 0, 1],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
]
Jednak obecny program mam jest wadliwy, ponieważ niektóre szczególne przypadki powrotu przeciwną wartość logiczną. Co powinienem robić zamiast tego?
To jest bieżący kod mam:
#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))
Jak definiujesz "połączone"? I czy "lewy górny" element zawsze = 1? – jedwards
Ten algorytm wydaje się po prostu sprawdzić, czy każdy węzeł ma więcej niż jednego sąsiada. Zamiast tego prawdopodobnie powinieneś używać DFS i sprawdzać, czy każdy węzeł jest odwiedzany. – kalhartt
@jedwards Połączone, tak jak we wszystkich elementach są połączone, przynajmniej przez jednego sąsiada. I nie, lewy górny element nie zawsze jest 1. Elementy planszy można umieścić w dowolnym miejscu, pod warunkiem, że są połączone. – Vicyorus