题目
思路
- 本题相当于问BFS中的当前点所在的区域连通块有多少个 ==Flood Fill算法 (可参考以下链接:洪水覆盖算法(Flood Fill):颜色填充-CSDN博客)
- 本题用DFS实现Flood Fill算法
- DFS是否需要恢复现场:(重要!!!!!)
AcWing 842. 通过全排列问题 深入探讨DFS回溯以及恢复现场的本质 - AcWing
判断DFS是否需要恢复现场_dfs 不用还原现场-CSDN博客
代码
# 搜索的四个方向
dx =[-1,0,1,0]
dy =[0,1,0,-1]
def dfs(x,y):# 初始化相关的参数:连通块个数,访问数组等;cnt = 1st[x][y]=True# 四个方向进行搜索for i in range(4):a=x+dx[i]b=y+dy[i]# 一些条件的判断:是否越界,是否能走,是否走过if a<0 or a>=n or b<0 or b>=m:continue;if g[a][b]!='.':continueif st[a][b]:continuecnt+=dfs(a,b)return cntwhile True:# 读入基本信息m,n=map(int,input().split())if n==0 or m==0 :breakg =[input() for _ in range(n)]# 获取起始坐标x,y=0,0for i in range(n):for j in range(m):if g[i][j]=='@':x,y=i,j# 设置访问列表st=[[False] * m for _ in range(n)] print(dfs(x,y))