前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Python机器人走迷宫(mirai机器人python)

qiguaw 2025-04-05 21:46:12 资源文章 48 ℃ 0 评论
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))


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表