'''
解题思路:
最简单的一种方式就是遍历数组中的每一个值,如果是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))