重复调用中列表更新的回溯问题

2024-10-02 00:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着解797。从源到目标的所有路径从Leetcode。 我想到了使用带递归的回溯。 在下面的代码中,当我从path弹出时,列表setOfPaths也会得到更新。 我不确定我在这里做错了什么

class Solution(object):
    def allPathsSourceTarget(self, graph):
        path=[]
        setOfPaths=[]
        path.append(0)
        self.backtrack(graph,0,len(graph)-1,path,setOfPaths)
        return setOfPaths
    
    def backtrack(self,graph,src,dest,path,setOfPaths):
        if(src == dest):
            setOfPaths.append(path)
        else:
            for node in graph[src]:
                path.append(node)
                self.backtrack(graph,node,dest,path,setOfPaths)
                path.pop(len(path)-1)  #BackTracking

Tags: path代码self路径srcnode目标len
1条回答
网友
1楼 · 发布于 2024-10-02 00:20:26

当您尝试将path附加到setOfPaths时,它实际上并不附加path的数据,而是附加对pathpath变量本身的引用。 因为setOfPaths不包含数据,所以它包含变量,当您在变量中修改数据时,您会看到setOfPaths也被修改

要消除它,最简单的方法是存储变量的副本,这样在尝试修改“main”变量时就不会修改数据

这段代码应该可以工作

if(src == dest):
    setOfPaths.append(path[:])

相关问题 更多 >

    热门问题