def dfs(i, j, matrix, x, y):
# 边界条件的判定
if i >= x or j >= y: # 下一步越界
return False
if matrix[i][j] == 1: # 下一步为墙
return False
if matrix[i][j] == -1: # 不可到达点
return False
if matrix[i][j] == 2: # 可到达点
return True
if matrix[i][j] == 0:
# 向东走一步
east = dfs(i + 1, j, matrix, x, y)
# 向北走一步
north = dfs(i, j + 1, matrix, x, y)
if east or north:
# 只要一个可以走
matrix[i][j] = 2 # 当前点为可到达点
else:
matrix[i][j] = -1 # 当前点为不可到达点
return matrix[i][j] == 2 # 返回当前点是否为可达点
def result(x, y, poses):
# 构造矩阵
matrix = [[0] * y for _ in range(x)]
for i, j in poses:
# 把墙放到矩阵里
matrix[i][j] = 1 # 墙标记为1
matrix[x - 1][y - 1] = 2 # 出口标记为2(可到达点)
# 从起点开始深搜
dfs(0, 0, matrix, x, y)
# 统计陷阱和不可达点的数量
trap = 0 # 陷阱数量
unreach = 0 # 不可达点的数量
for i in range(x):
for j in range(y):
if matrix[i][j] == 0:
unreach += 1
elif matrix[i][j] == -1:
trap += 1
return f"{trap} {unreach}"
# 自定义输入
x, y = map(int, input("请输入房间的行数和列数(用空格分隔): ").split()) # x行,y列
n = int(input("请输入墙壁的个数: "))
poses = [list(map(int, input(f"请输入第 {i + 1} 个墙壁的坐标(用空格分隔): ").split())) for i in range(n)] # 墙的位置
# 输出结果
print(result(x, y, poses))
本文暂时没有评论,来添加一个吧(●'◡'●)