递归时变量意外更改?

2023-12-04

Context

我目前正在尝试 Reddit 的/r/每日程序员挑战.

这个想法是找到 ASCII 迷宫的解决方案。不幸的是,递归的工作方式与我的预期不同。程序检查是否有空间可以移动到当前空间的右侧、左侧、下方或上方。如果存在,则将空间移动到并使用新的坐标再次输入该函数。这一直持续到找到终点为止。

当找到末尾时,程序退出。如果发现死胡同,则递归将返回到前一点并检查是否有更多方向,这将持续到结束。


Problem

我的程序运行得很好,但是即使在备份递归之后,迷宫也会画出我的线(由“*****”表示)。我不知道如何解释,所以我将使用图像来提供更好的描述。

Maze, colors = new paths.

每种新颜色都代表一条新路径。然而,我本来期望只显示当前的递归路径。例如,在这种情况下,我希望只显示黄色路径。有人可以帮助我理解为什么所有路径都保留吗?


The code

import time
import sys
import os

maze = """\
###############
#S        #   #
### ### ### # #
#   #   #   # #
# ##### ##### #
#     #   #   #
# ### # ### ###
# #   # #   # #
# # ### # ### #
# # # # # #   #
### # # # # # #
#   #   # # # #
# ####### # # #
#           #E#
###############"""

def displayMaze(maze):
    os.system("cls")
    display = ""
    for x in maze:
        for y in x:
            display = display + y
        display = display + "\n"
    print(display)

def findStart(maze):
    #Get the maze start co-ords.
    for x in range(0,len(maze[0])):
        for y in range(0,len(maze)):
            if maze[x][y] == "S":
                return x,y

def findPath(x,y,maze):
    #Look right, left, up and down, If path then move.
        time.sleep(0)
        if maze[y][x+1] == " ":
            newMaze = maze
            newMaze[y][x+1] = "*"
            displayMaze(newMaze)
            findPath(x+1,y,newMaze)
        elif maze[y][x+1] == "E":
            sys.exit("Done")
        if maze[y][x-1] == " ":
            newMaze = maze
            newMaze[y][x-1] = "*"
            displayMaze(newMaze)
            findPath(x-1,y,newMaze)
        elif maze[y][x-1] == "E":
            sys.exit("Done")
        if maze[y+1][x] == " ":
            newMaze = maze
            newMaze[y+1][x] = "*"
            displayMaze(newMaze)
            findPath(x,y+1,newMaze)
        elif maze[y+1][x] == "E":
            sys.exit("Done")
        if maze[y-1][x] == " ":
            newMaze = maze
            newMaze[y-1][x] = "*"
            displayMaze(newMaze)
            findPath(x,y-1,newMaze)
        elif maze[y-1][x] == "E":
            sys.exit("Done")


if __name__ == "__main__":
    maze = maze.split("\n")
    newMaze = []
    for line in maze:
        newMaze.append(list(line))
    x,y = findStart(newMaze)
    findPath(x,y,newMaze)

newMaze = maze不复制列表,它只是创建指向同一对象的另一个名称。要复制,您应该import copy在你的程序的顶部,然后做newMaze = copy.deepcopy(maze)。 (你需要一个深拷贝,因为maze是列表的列表,因此您不仅需要复制外部列表,还需要复制其中的所有列表。)

在 Python 中,分配给一个普通名称(例如blah = ...)从不复制任何东西。如果您想要一份副本,则必须明确制作一份。执行此操作的方法取决于您要复制的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归时变量意外更改? 的相关文章

随机推荐

  • SSE 将整数加载到 __m128 中

    gcc 的内在加载 4 是什么ints into m128和 8 个整数 m256 对齐 未对齐 关于什么unsigned ints 使用英特尔的 SSE 内部信息 您正在寻找的是 mm load si128 mm loadu si128
  • Url 编码和 HTML 编码之间的区别

    和有什么区别网址编码 and a HTML 编码 HTML 编码对 HTML 文档中使用的字符串中的特殊字符进行转义 以防止与 HTML 元素混淆 例如更改
  • 如何使用 Chartkick.js 隐藏轴

    我在用https github com ankane vue chartkick绘制 Vue 图表 但看起来它没有说明如何从该文档中隐藏轴 有谁知道如何在这个图书馆中做到这一点 提前致谢 图表组件有一个库属性 允许您自定义图表的选项 要隐藏
  • 使用 XIB 文件加载 UITableViewCell 子类

    我无法获取我的CustomTableViewCell 一个子类UITableViewCell出现在我的表格视图中 我使用 xib 来表示该单元格 但我假设数据源委托的代码不会更改 我确保在表视图单元 XIB 内设置相同的重用标识符 我将问题
  • 使用 gsub() 删除 R 中字母之间多余的空格

    关于如何删除单词之间多余的空格 有很多答案 这非常简单 但是 我发现删除多余的空格within言语要困难得多 作为一个可重现的示例 假设我有一个如下所示的数据向量 x lt c L L C P O BOX 123456 NEW YORK 我
  • AssertionError:视图函数映射正在覆盖现有端点函数

    我不知道如何解决使用 Flask 时从 Python 代码中得到的这个问题 app route addEvent methods POST def addEvent app route deleteEvent methods POST de
  • 使用 R 中的 ggplot2 绘制带有单独椭圆的散点图中的点

    My dataset is formed by 4 columns as shown below 左边两列代表地理结构的坐标XY 左边两列代表 每个 地理单元的大小 南北直径和东西直径 我想以图形方式表示一个散点图 在其中绘制所有坐标并在每
  • vuejs3 I18n 和组合 API

    我现在正在 vueJS 中做一个前端界面 并且目前正在使用 vuejs 3 和 i18n i18n 的实现按正常方式工作得很好 但是当我想将它与组合 API 一起使用时 就会出现问题 所以我做了什么 我的 main js 看起来像这样 co
  • 图解分析器 - 如何将手臂添加到我的流程图中?

    对于我的流程图 我有一个详细说明数据流的垂直图表 然而 在向下的箭头上 我想添加侧箭头来描述丢失的数据的去向 我该怎么做呢 我在任何文档和示例中都看不到它 因为它往往涉及更复杂的事情 而且我知道这是一项非常基本的任务 library Dia
  • Maven循环依赖

    我有一个模块化的 Maven 项目 其中两个模块 BIZ 和 EJB 包含如下内容 PART OF BIZ Module public interface MyInterface public void foo public class I
  • 将参数传递给 JDBCPreparedStatement

    我正在尝试为我的程序制作验证类 我已经建立了与 MySQL 数据库的连接 并且已经将行插入到表中 该表包括firstName lastName and userID字段 现在我想通过构造函数的参数选择数据库中的特定行 import java
  • Swift 泛型函数无法将类型的值转换为预期的参数类型

    我尝试创建通用函数 func importArray
  • Pandas groupby 值与 bin

    这似乎是一个简单的问题 但我需要你的帮助 例如 我有 df x 1 2 3 4 5 6 7 8 9 10 y 2 1 3 1 8 9 6 7 4 6 如何将 x 在 1 到 5 和 6 到 10 的范围内分组 并计算这两个 bin 的平均值
  • JFreeChart:使用 java.time.LocalDate 或 java.time.LocalDateTime 创建图表

    java util Date非常容易出错 它死了 长命java time Given a Map
  • ASP.NET MVC4,视图将旧值返回到控制器

    我是 MVC 和 ASP NET 的新手 我的要求是 我必须第一次在我的视图中显示两条记录 并且我的视图包含一个 交换 按钮 当我按下此按钮时 应该执行控制器的后操作 并且它必须采用原始视图模型 并且需要交换两个记录并且应该呈现相同的视图
  • 在 url 中使用 # 打开模式

    我对这个可能是愚蠢的问题感到抱歉 但我想简单地在 url 中使用 打开模态 因此 如果我调用 www domain com modal1 它将打开已经弹出模式的页面 哦 我正在使用jquery 谢谢你 许多应用程序框架 我偏向backbon
  • 从一组观察结果创建队列式数据框[重复]

    这个问题在这里已经有答案了 我是 R 新手 有一个简单的问题 因为我仍在学习 R 数据操作 管理的风格 我有一段时间内基本临床特征 血压 胆固醇等 观察数据集 每个观察结果都有患者 ID 和日期 但作为单独的行项目输入 像这样的事情 Pat
  • VBA 查找和替换

    我正在使用 Excel VBA 从电子表格生成 Word 文档 作为最后一步的一部分 我想找到所有双段落并将其替换为单段落 基本代码 Dim objWord Dim objDoc Dim objSelection Set objWord C
  • 表视图中的单元格没有响应

    我正在开发一个待办事项列表应用程序 每当我在simulator并尝试打印我的项目array 其他单元格项目被打印 这是我的代码 import UIKit class TodoListViewController UITableViewCon
  • 递归时变量意外更改?

    Context 我目前正在尝试 Reddit 的 r 每日程序员挑战 这个想法是找到 ASCII 迷宫的解决方案 不幸的是 递归的工作方式与我的预期不同 程序检查是否有空间可以移动到当前空间的右侧 左侧 下方或上方 如果存在 则将空间移动到