繁体   English   中英

如何存储递归图函数中的值?

[英]How to store values from a recursive graph function?

我有以下递归函数 - 该函数可以很好地打印出树/图形的所有路径。 但是尝试将ROUTES添加为全局变量并附加到它会导致一堆空的嵌套列表: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ...等

使用全局变量的更好解决方案和存储路径的更好解决方案是我正在寻找的,这是我的功能:

 def printAllPathsUtil(self, u, d, visited, path):
        # Mark the current node as visited and store in path
        visited[u] = True
        path.append(u)
        # If current vertex is same as destination, then print
        # current path[]
        if u == d:
            print(path)
            ROUTES.append(path)
        else:
            # If current vertex is not destination
            # Recur for all the vertices adjacent to this vertex
            for i in self.graph[u]:
                if visited[i] == False:
                    self.printAllPathsUtil(i, d, visited, path)
                    # Remove current vertex from path[] and mark it as unvisited

        path.pop()
        visited[u] = False

问题的根源在于您添加到 ROUTES 的路径变量是对用于控制遍历的同一对象的引用。 每次找到目的地时都会添加相同的对象,因此,当过程结束(路径再次为空)时,您的 ROUTE 列表包含对(现在为空)路径对象的多个引用。

您的更正ROUTES.append([i for i in path])创建路径变量的新实例以存储在 ROUTES 列表中。 这就是它起作用的原因。

在 Python 中将列表存储在变量中是一个常见的错误,假设您持有一个副本,而实际上它只是一个引用,并且内容可能会被程序的其他部分修改,从而更改原始内容。

请注意,您也可以使用ROUTES.append(path.copy())ROUTES.append(list(path))ROUTES.append([*path])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM