题目
关键词
队列,广度优先搜索
代码记录
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
from collections import deque
m,n = len(grid),len(grid[0])
visited={}
res=0
for i in range(m):
for j in range(n):
if grid[i][j]=='1' and str(i)+'-'+str(j) not in visited:
res += 1
queue=deque([(i,j)])
visited[str(i)+'-'+str(j)]=1
while queue:
cur=queue.popleft()
to_search=[(max(cur[0]-1,0),cur[1]),(min(cur[0]+1,m-1),cur[1]),(cur[0],max(cur[1]-1,0)),(cur[0],min(cur[1]+1,n-1))]
for node in to_search:
if str(node[0])+'-'+str(node[1]) not in visited:
visited[str(node[0])+'-'+str(node[1])]=1
if grid[node[0]][node[1]]=='1':
queue.append((node[0],node[1]))
return res