from union_find import UnionFind def num_islands(grid): if not grid: return 0 cols = len(grid[0]) rows = len(grid) union_find = UnionFind(grid) for r in range(rows): for c in range(cols): if grid[r][c] == '1': grid[r][c] = '0' if r - 1 >= 0 and grid[r - 1][c] == '1': union_find.union(r * cols + c, (r - 1) * cols + c) if r + 1 < rows and grid[r + 1][c] == '1': union_find.union(r * cols + c, (r + 1) * cols + c) if c - 1 >= 0 and grid[r][c - 1] == '1': union_find.union(r * cols + c, r * cols + c - 1) if c + 1 < cols and grid[r][c + 1] == '1': union_find.union(r * cols + c, r * cols + c + 1) count = union_find.get_count() return count def main(): def print_grid(grid): for i in grid: print("\t", i) grid1 = [ ['1', '1', '1'], ['0', '1', '0'], ['1', '0', '0'], ['1', '0', '1'] ] grid2 = [ ['1', '1', '1', '1', '0'], ['1', '0', '0', '0', '1'], ['1', '0', '0', '1', '1'], ['0', '1', '0', '1', '0'], ['1', '1', '0', '1', '1'] ] grid3 = [ ['1', '1', '1', '1', '0'], ['1', '0', '0', '0', '1'], ['1', '1', '1', '1', '1'], ['0', '1', '0', '1', '0'], ['1', '1', '0', '1', '1'] ] grid4 = [ ['1', '0', '1', '0', '1'], ['0', '1', '0', '1', '0'], ['1', '0', '1', '0', '1'], ['0', '1', '0', '1', '0'], ['1', '0', '1', '0', '1'] ] grid5 = [ ['1', '0', '1'], ['0', '0', '0'], ['1', '0', '1'] ] inputs = [grid1, grid2, grid3, grid4, grid5] num = 1 for i in inputs: print(num, ".\tGrid:\n", sep = "") print_grid(i) print('\n\tOutput :', num_islands(i)) print('-' * 100) num += 1 if __name__ == "__main__": main()