day20 Python实现迷宫算法 v1版本

# 深度遍历实现的迷宫算法

lookup_path = []
history_path = []
# maze = [[0, 0, 1, 0, 1], [1, 0, 0, 0, 1], [0, 0, 1, 1, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0]]
maze = [[0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [0, 1, 0, 1, 0], [1, 1, 1, 0, 0], [0, 1, 0, 0, 1], [0, 1, 0, 0, 0]]

# 打印二维数组
for k in maze:
    for v in k:
        print(v, end=" ")
    print("")

print("\n")


def up(location):
    # 到达了数组顶端
    if location[0] == 0:
        return False
    else:
        new_location = [location[0] - 1, location[1]]

        # 走过的路不再走
        if new_location in history_path:
            return False
        # 遇到墙不走
        elif maze[new_location[0]][new_location[1]] == 1:
            return False
        else:
            lookup_path.append(new_location)
            history_path.append(new_location)
            return True


def down(location):
    # 遇到迷宫最下方的时候,不能继续往下走
    if location[0] == len(maze) - 1:  # 6行5列的二维数组行数,从0开始计算所以是6-1=5 行
        return False
    else:
        new_location = [location[0] + 1, location[1]]
        # 走过的路不再走
        if new_location in history_path:
            return False
        # 遇到墙不走
        elif maze[new_location[0]][new_location[1]] == 1:
            return False
        else:
            history_path.append(new_location)
            lookup_path.append(new_location)
            return True


def left(location):
    # 遇到迷宫最左边,不能继续往左走
    if location[1] == 0:
        return False
    else:
        new_location = [location[0], location[1] - 1]
        # 走过的路不再走
        if new_location in history_path:
            return False
        # 遇到墙不走
        elif maze[new_location[0]][new_location[1]] == 1:
            return False
        else:
            history_path.append(new_location)
            lookup_path.append(new_location)
            return True


def right(location):
    # 遇到迷宫最右边,不能继续向右移动
    if location[1] == len(maze[0]) - 1:  # 6行5列的二维数组列数,从0开始计算所以是5-1=4行
        return False
    else:
        new_location = [location[0], location[1] + 1]
        # 走过的路不再走
        if new_location in history_path:
            return False
        # 遇到墙不走
        elif maze[new_location[0]][new_location[1]] == 1:
            return False
        else:
            history_path.append(new_location)
            lookup_path.append(new_location)
            return True


start = [0, 0]
end = [5, 4]
print("start: %s --> end: %s\n" % (start, end))
lookup_path.append(start)
history_path.append(start)

while lookup_path[-1] != end:
    now = lookup_path[-1]
    # print("retry:%s, Lookup path:%s" % (now, route_stack))
    if up(now) or down(now) or left(now) or right(now):
        continue

    lookup_path.pop()

print("final path: ", lookup_path)

  

猜你喜欢

转载自www.cnblogs.com/fanghongbo/p/9989084.html