py_island_matrix_counter · Python

▶ Aprender py_island_matrix_counter (Python) paso a paso · explicación de py_island_matrix_counter

Código línea a línea

Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.

py_island_matrix_counter.py
CódigoSubjectPor qué
def island_matrix_counter(matrix: list[list[str]]) -> int:def island_matrix_counter(matrix: list[list[str]]) -> int:Firma del subject. Devuelve un int.
rows = len(matrix)An empty matrix (or matrix with no rows) should return 0.Número de filas; 0 si está vacía.
cols = len(matrix[0]) if rows else 0An empty matrix (or matrix with no rows) should return 0.Ancho de la primera fila. El if rows evita matrix[0] sobre una lista vacía.
seen = set()DFS/BFS traversal or matrix mutation can be used to explore each complete island.Celdas ya contadas. Un set en vez de pintar la matriz: así no muto la entrada.
count = 0returns the total number of islandsIslas encontradas.
for r in range(rows):Count each separate island exactly once.Recorro toda la matriz celda a celda.
for c in range(cols):Columna a columna.
if matrix[r][c] != "1" or (r, c) in seen:"1" represents land.
"0" represents water.
Agua, o tierra que ya pertenece a una isla contada: paso de largo. Comparo con "1" (string), no 1.
continueSiguiente celda.
count += 1Count each separate island exactly once.Tierra nueva = isla nueva. Ahora la recorro entera para no volver a contarla.
stack = [(r, c)]DFS/BFS traversalDFS con una pila a mano: sin recursión, sin límite de profundidad.
seen.add((r, c))Marco al meter en la pila, no al sacar: evita duplicados en la pila.
while stack:Mientras queden celdas de esta isla por expandir.
y, x = stack.pop()Saco una celda.
for ny, nx in ((y - 1, x), (y + 1, x), (y, x - 1), (y, x + 1)):Cells are considered connected only when they are directly adjacent horizontally (left, right) or vertically (up, down).Los 4 vecinos: arriba, abajo, izquierda, derecha. Sin diagonales.
if 0 <= ny < rows and 0 <= nx < cols and matrix[ny][nx] == "1" and (ny, nx) not in seen:Diagonal cells do not count as connected.Dentro del tablero, tierra y sin visitar. Los límites van primero: así matrix[ny][nx] nunca se sale.
seen.add((ny, nx))Marco y encolo.
stack.append((ny, nx))Lo expandiré después.
return countreturns the total number of islandsEl total.