题解:
分析
这题题意大概就是说:岛屿就是连通块。陆地就是岛屿
用flag标记是否淹没(True:淹没,False:没有淹没),初始状态都定为被淹没,如果周围都是陆地(四个方向),那么这个岛必定不会沉,改写flag的状态。
对四个方向进行搜索,注意搜索必须是没走过的,并且是陆地。
注意递归的深度,蓝桥在提交的时候直接跟我说无效的返回。。。。
后续的二维遍历中,没走过和陆地这两个判断条件,将找到该陆地的连通块,可以保证有且只有一次遍历到该连通块
这道题DFS和BFS都可以,但DFS递归深度超了,所以用BFS解决:
## 解题思路
请填写解题思路
```
import os
import sys
# 请在此输入您的代码
n=int(input())
grid=[]
for i in range(n):
grid.append(input())
from collections import deque
flag=True
visited=[[False]*n for i in range(n)]
def BFS(x,y,grid,visited):
dire=[(-1,0),(1,0),(0,-1),(0,1)]
global flag
queue=deque()
queue.append((x,y))
visited[x][y]=True
while queue:
node=queue.popleft()
x,y=node[0],node[1]
if grid[x-1][y]=="#" and grid[x+1][y]=="#" and grid[x][y-1]=="#" and grid[x][y+1]=="#":
flag=False
for dir in dire:
if grid[x+dir[0]][y+dir[1]]=="#" and visited[x+dir[0]][y+dir[1]]==False and 0<=x+dir[0]<n and 0<=y+dir[1]<n:
queue.append((x+dir[0],y+dir[1]))
visited[x+dir[0]][y+dir[1]]=True
ans=0
for i in range(n):
for j in range(n):
if grid[i][j]=="#" and visited[i][j]==False:
flag=True
BFS(i,j,grid,visited)
if flag==True:
ans+=1
print(ans)
```