机器人走迷宫(python解法)

一、题目

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、解题思路

首先是对自己的一个思路描述,首先只是想判断四周是否为存在0,然后不断顺着0的位置一路走下去,当出现四周没有1时,在从原本的位置倒退一格,但是发现这样的结果会忽略很多条路径,因此最终看来很多的相关的题目,总结出了自己的方法
正确解法:
归结到底这还是一个深度算法的题,我们要模拟出每一条路径,从四个方向不断尝试向前前进,如果能走我们就将该位置存储最终路径,不能走我们不断回退,同时删除存入的路径。最终代码如下


代码

data = []
path_sum = []  # 所有的路径
len_path = []  # 路径的长度统计
# 输入
n, m = input().split()
n, m = int(n), int(m)

for i in range(n):
    data.append(input(f'请输入第{i + 1}行的数据:').split())


def outOfRange(i, j, path_one):
    """
    判断是否超出范围或者撞墙
    :return:
    """
    if i == n or i == -1 or j == m or j == -1:  # 判断是否超出围墙
        pass
    else:
        # 前路可走,并且不走回头路
        if data[i][j] == '0' and path_one.count([i, j]) == 0:
            walk(i, j, path_one)


def judgment_executable(i, j, path_one):
    """
    进行发散
    :return:
    """
    path_one.append([i, j])
    if i == n - 1 and j == m - 1:  # 到达终点
        data[n - 1][m - 1] = '0'  # 终点重新设为可走
        # 变为元组存入总数据
        path_sum.append(tuple(path_one))
        # 删除最后一个,进行发散
        path_one.pop()
    else:
        outOfRange(i + 1, j, path_one)  # 下
        outOfRange(i, j - 1, path_one)  # 左
        outOfRange(i - 1, j, path_one)  # 上
        outOfRange(i, j + 1, path_one)  # 右
        path_one.pop()  # 删除无路可走的位置


# 不停前进
def walk(i, j, path_one):
    judgment_executable(i, j, path_one)


walk(0, 0, [])  # 开始行走

# 输出
for i in path_sum:
    for j in i:
        print(f'{tuple(j)}->' if j != [n - 1, m - 1] else tuple(j), end='')
    print(f'\tStep={len(i) - 1}')
    len_path.append(len(i) - 1)  # 存入所有路径的所有大小
print(max(len_path) - min(len_path))
```。

猜你喜欢

转载自blog.csdn.net/m0_46657126/article/details/129182227