【发布时间】:2020-10-04 05:28:47
【问题描述】:
我有一个使用 defaultdict 表示 python3 中图形的邻接列表的图形字典,并希望在该图形上执行 DFS。 现在,问题是找到从起始词 beginWord 到 endWord 的所有路线,我正在应用 DFS 进行递归+回溯。
例如
beginWord = "hit"
endWord = "cog"
graph : defaultdict(<class 'list'>, {'hit': ['hot'], 'hot': ['dot', 'lot'], 'dot': ['dog'], 'lot': ['log'], 'dog': ['cog'], 'log': ['cog']})
输出应该是这样的:
[["hit","hot","dot","dog","cog"],
["hit","hot","lot","log","cog"]]
我的方法:
我已经制作了图表并创建了两个新列表:path[] 和 ans[]。
path 基本上从 beginWord 开始直到它到达 endWord,当它到达时,我将它附加到 ans 变量(现在它是一个二维嵌套列表),然后从列表中弹出最后一个单词以触发回溯。
我将继续这样做,直到所有路径都被探索并存储在 ans[] 列表中。
问题:
ans[] 返回空列表,但它包含两个嵌套的空列表,这表明它知道答案是两个列表,这是正确的,但为什么会弹出这些项目?
我的代码:
def DFS(beginWord, endWord, graph, path, ans):
path.append(beginWord)
if beginWord == endWord:
ans.append(path)
path.pop()
return
for i in graph[beginWord]:
DFS(i, endWord, graph, path, ans)
path.pop()
注意:对 ans[] 使用 extend 而不是 append 有效(不完全是,但我得到了路径)但为什么不 append 呢?
【问题讨论】:
标签: python list recursion python-3.6 depth-first-search