本题链接:
该题解法很多,这里我用的DFS算法,时间复杂度为O(nm).
import sys
# python设置了默认迭代次数,如果不用以下导入的话,最大迭代次数1e3级别,dfs无法正常运行
sys.setrecursionlimit(2000000)
n, m = map(int, (input()).split())
a = [[0] * (m + 1)] # 接受数据
vis = [[0] * (m + 1) for _ in range(n + 1)] # 是否是x,且是否经过过
for i in range(1, n + 1):
a.append(['0'] + list(input()))
for i in range(1, n + 1): # 用vis记录x
for j in range(1, m + 1):
vis[i][j] = 1 if a[i][j] == 'X' else 0
dx = [0, 0, 1, -1] # 下一步走的方向
dy = [1, -1, 0, 0]
block = [[], []] # 记录两个斑点块的位置
def dfs(block, x, y): # 保留点的列表,迭代点坐标x,y
vis[x][y] = 0 # 记录
block.append((x, y)) # 记录
for i in range(4):
nx = x + dx[i]
ny =