def dfs(v, x, y, m, n, point, point2):# 如果越界或者是障碍物,或者已经访问过,直接返回if x = m or y >= n or v[x][y] == 1 or point2[x][y] == 1:return# 如果是聚餐地点且未访问过,增加访问次数if v[x][y] == 3 and point2[x][y] == 0:point[x][y] += 1# 标记该点已经访问point2[x][y] = 1# 递归遍历上下左右四个方向dfs(v, x + 1, y, m, n, point, point2)dfs(v, x, y + 1, m, n, point, point2)dfs(v, x - 1, y, m, n, point, point2)dfs(v, x, y - 1, m, n, point, point2)def main:m, n = map(int, input.split)sum = 0hw = v = point = [[0] * n for _ in range(m)] # 记录值为3的点的访问次数point1 = [[0] * n for _ in range(m)] # 小华访问记录point2 = [[0] * n for _ in range(m)] # 小为访问记录# 读入地图数据并找到小华和小为的位置for i in range(m):row = list(map(int, input.split))v.append(row)for j in range(n):if row[j] == 2:hw.append((i, j)) # 记录小华或小为的位置# 分别从小华和小为的位置进行DFSdfs(v, hw[0][0], hw[0][1], m, n, point, point1)dfs(v, hw[1][0], hw[1][1], m, n, point, point2)# 统计可以被两人同时到达的聚餐地点for i in range(m):for j in range(n):if point[i][j] >= 2:sum += 1print(sum)if __name__ == '__main__':main摘要:def dfs(v, x, y, m, n, point, point2):# 如果越界或者是障碍物,或者已经访问过,直接返回if x < 0 or y < 0 or x >= m or y >= n or v[x][y] == 1 or point2[x][
来源:学而优教育