Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import List
- from collections import deque
- def count_number_of_islands(grid: List[List[int]]) -> int:
- M, N = len(grid), len(grid[0])
- def get_neighbors(r, c):
- offsets = [(-1, 0), (0, -1), (0, +1), (+1, 0)] # NWES
- return [(r+o[0], c+o[1]) for o in offsets
- if (0 <= r+o[0] and r+o[0] < M) and (0 <= c+o[1] and c+o[1] < N)
- and grid[r+o[0]][c+o[1]]]
- def bfs(r, c, visited, islands): # visit adjacent 1s starting at (r,c)
- queue, island = deque([(r, c)]), []
- while len(queue):
- c_r, c_c = queue.popleft() # cell coord
- island.append((c_r, c_c))
- neighbors = get_neighbors(c_r, c_c)
- [queue.append(n) for n in neighbors if n not in visited]
- [visited.add(n) for n in neighbors]
- islands.append(island)
- visited, islands = set(), [] # matrix also works for visited
- for r in range(M):
- for c in range(N):
- if (r, c) in visited: # skip previously discovered island
- continue
- elif grid[r][c] == 1: # new island, mark adjacent 1s visited
- bfs(r, c, visited, islands)
- else: # 0, mark visited
- visited.add((r, c))
- return len(islands)
- if __name__ == '__main__':
- grid = [[int(x) for x in input().split()] for _ in range(int(input()))]
- res = count_number_of_islands(grid)
- print(res)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement