Basic-Graphs: Input grids can now be rectagular, moved to numpy

This commit is contained in:
2025-10-14 09:41:47 -04:00
parent e1b3928cf4
commit 82ba7de3eb
2 changed files with 27 additions and 11 deletions

View File

@@ -8,30 +8,34 @@ Honor Code and Acknowledgments:
Comments here on your code and submission. Comments here on your code and submission.
""" """
import numpy as np
def explore_island(grid: list[list[int]], start: tuple[int, int]) -> int: type LandGrid = np.ndarray[tuple[int, int], np.dtype[np.bool]]
n: int = len(grid)
def explore_island(grid: LandGrid, start: tuple[int, int]) -> int:
num_rows, num_cols = grid.shape
size: int = 0 size: int = 0
def recurse(coord: tuple[int, int]): def recurse(coord: tuple[int, int]):
x, y = coord x, y = coord
if grid[y][x] == 0: if not grid[y, x]:
return return
nonlocal size nonlocal size
size += 1 size += 1
grid[y][x] = 0 grid[y, x] = False
neighbors: list[tuple[int, int]] = [] neighbors: list[tuple[int, int]] = []
if y > 0: if y > 0:
neighbors.append((x, y - 1)) neighbors.append((x, y - 1))
if y < n - 1: if y < num_rows - 1:
neighbors.append((x, y + 1)) neighbors.append((x, y + 1))
if x > 0: if x > 0:
neighbors.append((x - 1, y)) neighbors.append((x - 1, y))
if x < n - 1: if x < num_cols - 1:
neighbors.append((x + 1, y)) neighbors.append((x + 1, y))
for neighbor in neighbors: for neighbor in neighbors:
@@ -47,16 +51,19 @@ def explore_island(grid: list[list[int]], start: tuple[int, int]) -> int:
def main(): def main():
n: int = int(input()) n: int = int(input())
matrix: list[list[int]] = [list(map(int, input().split())) for _ in range(0, n)] raw_matrix: list[list[int]] = [list(map(int, input().split())) for _ in range(0, n)]
land_grid: LandGrid = np.array(raw_matrix, dtype=bool)
num_rows, num_cols = land_grid.shape
largest_island: int = -1 largest_island: int = -1
for y in range(0, n): for y in range(0, num_rows):
for x in range(0, n): for x in range(0, num_cols):
if matrix[y][x] == 0: if not land_grid[y, x]:
continue continue
island_size: int = explore_island(matrix, (x, y)) island_size: int = explore_island(land_grid, (x, y))
if island_size > largest_island: if island_size > largest_island:
largest_island = island_size largest_island = island_size

View File

@@ -0,0 +1,9 @@
8
0 0 1 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0
0 1 1 0 1 0 0 0 0 0 0 0 0
0 1 0 0 1 1 0 0 1 0 1 0 0
0 1 0 0 1 1 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0