(mask: np.ndarray)
| 964 | |
| 965 | |
| 966 | def _connected_components_hex(mask: np.ndarray) -> list[list[tuple[int, int]]]: |
| 967 | rows, cols = mask.shape |
| 968 | vis = np.zeros_like(mask, dtype=np.uint8) |
| 969 | comps: list[list[tuple[int, int]]] = [] |
| 970 | |
| 971 | for r in range(rows): |
| 972 | for c in range(cols): |
| 973 | if not mask[r, c] or vis[r, c]: |
| 974 | continue |
| 975 | q = deque([(r, c)]) |
| 976 | vis[r, c] = 1 |
| 977 | comp: list[tuple[int, int]] = [] |
| 978 | while q: |
| 979 | rr, cc = q.popleft() |
| 980 | comp.append((rr, cc)) |
| 981 | for r2, c2 in hex_neighbors(rr, cc, rows, cols): |
| 982 | if mask[r2, c2] and not vis[r2, c2]: |
| 983 | vis[r2, c2] = 1 |
| 984 | q.append((r2, c2)) |
| 985 | comps.append(comp) |
| 986 | |
| 987 | return comps |
| 988 | |
| 989 | |
| 990 | def _pick_single_desert_seven(cfg: Config, tilemap: np.ndarray) -> tuple[int, int] | None: |
no test coverage detected