'''
解题思路:
最简单的一种方式就是遍历数组中的每一个值,如果是1就说明是岛屿,然后把它置为0或者其他的字符都可以,只要不是1就行,
然后再遍历他的上下左右4个位置。如果是1,说明这两个岛屿是连着的,只能算是一个岛屿,我们还要把它置为0,
然后再以它为中心遍历他的上下左右4个位置……。如果是0,就说明不是岛屿,就不在往他的上下左右4个位置遍历了
'''
#
# 判断岛屿数量
# @param grid char字符型二维数组 
# @return int整型
#

class Solution:
    def solve(self , grid ):
        # write code here

        #for i in grid:
        #    print(i)

        r = len(grid)
        c = len(grid[0])

        def bfs(i,j):
            queue = [[i,j]]                    
            while queue:                
                t = queue.pop()
                i = t[0]
                j = t[1]
                grid[i][j]='0'

                if 0<=i+1<=r-1 and 0<=j<=c-1 and grid[i+1][j]=='1':
                    queue.insert(0,[i+1,j])
                if 0<=i-1<=r-1 and 0<=j<=c-1 and grid[i-1][j]=='1':
                    queue.insert(0,[i-1,j])
                if 0<=i<=r-1 and 0<=j+1<=c-1 and grid[i][j+1]=='1':
                    queue.insert(0,[i,j+1])
                if 0<=i<=r-1 and 0<=j-1<=c-1 and grid[i][j-1]=='1':
                    queue.insert(0,[i,j-1])     

        def dfs(i,j):
            grid[i][j]='0'
            if 0<=i+1<=r-1 and 0<=j<=c-1 and grid[i+1][j]=='1':
                dfs(i+1,j)
            if 0<=i-1<=r-1 and 0<=j<=c-1 and grid[i-1][j]=='1':
                dfs(i-1,j)
            if 0<=i<=r-1 and 0<=j+1<=c-1 and grid[i][j+1]=='1':
                dfs(i,j+1)
            if 0<=i<=r-1 and 0<=j-1<=c-1 and grid[i][j-1]=='1':
                dfs(i,j-1)        

        num = 0
        for i in range(r):
            for j in range(c):
                if grid[i][j]=='1':
                    num += 1
                    dfs(i,j)
        #print('')
        #for i in grid:
        #    print(i)

        return num

#grid = [['1','1','0','0','0'],['0','1','0','1','1'],['0','0','0','1','1'],['0','0','0','0','0'],['0','0','1','1','1']]  # 3
#print(Solution().solve(grid))