In [44]:
# '1' are land, '0' is water. Found the *number* of islands
a = [[0,0,0,1,1],
     [0,1,1,0,0],
     [0,1,0,0,1],
     [0,1,1,0,1],
     [1,0,0,0,1]]

In [45]:
# Let's try a DFS
def created_visited(n,m):
    row = [False]*m
    arr = [row[:] for _ in range(n)]
    return arr
            
def dfs(arr, i, j, visited):
    if not (0 <= i < len(arr)):
        return None
    row = arr[i]
    if not (0 <= j < len(row)):
        return None 
    if visited[i][j]:
        return None
    visited[i][j] = True
    if row[j]:
        dfs(arr, i+1, j, visited)
        dfs(arr, i, j+1, visited)
        dfs(arr, i-1, j, visited)
        dfs(arr, i, j-1, visited)
    return bool(row[j])

def run(arr):
    n_islands = 0
    n = len(arr)
    m = len(arr[0])
    visited = created_visited(n,m)
    for i in range(n):
        for j in range(m):
            if visited[i][j]:
                continue
            r = dfs(arr,i,j,visited)
            n_islands += int(r)
    print('Number of islands: {}'.format(n_islands))

In [46]:
run(a)


Number of islands: 4

In [ ]: