leecode 200岛屿数量 深度搜索
题目
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
思路
深搜
先设出一个标记数组mark,遍历原数组,如果该位置原数组为1标记数组为0,则次位置还没有被搜索过。传入DFS数组,开始上下左右的搜索。每搜索到一个1就标记mark数组。每次遍历一次原数组,就出一个岛屿。
广搜
代码
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
if len(grid)==0:
return 0
m,n=len(grid),len(grid[0])
count=0
#mark=[(i,j) for i in range(m) for j in range(n) if grid[i][j]==0]
mark=[['0']*n for i in range(m)]
for i in range(m):
for j in range(n):
if mark[i][j]=='0' and grid[i][j]=='1':
count += 1
self.DFS(mark,grid,i,j)
return count
def DFS(self,mark,grid,x,y):
mark[x][y]=1
dpx=[-1,1,0,0]
dpy = [0, 0, 1, -1]
for i in range(4):
newx=x+dpx[i]
newy=y+dpy[i]
if newx<0 or newx>=len(mark) or newy<0 or newy>=len(mark[0]):
continue
if mark[newx][newy]=='0' and grid[newx][newy]=='1':
self.DFS(mark, grid, newx, newy)

浙公网安备 33010602011771号