我正在尝试在python中构建图形库(以及标准图形算法)。我试图实现DFS,这就是它的样子
def DFS(gr, s, path):
""" Depth first search
Returns a list of nodes "findable" from s """
if s in path: return False
path.append(s)
for each in gr.neighbors(s):
if each not in path:
DFS(gr, each, path)
这很好但我对它的使用方式不满意。例如。目前你需要这样做
path = []
DFS(mygraph, "s", path)
print path
而不是这个,我想以这种方式使用DFS
path = DFS(mygraph, "s")
print path
使用递归DFS,我无法提出像上面那样工作的实现。有人能给我一些关于如何实现这个目标的指示?
答案 0 :(得分:2)
只需创建一个调用您已有的方法的包装器方法:
def DFS(gr, s):
path = []
DFS2(gr, s, path)
return path
此处DFS2
是您在上面显示的方法。
答案 1 :(得分:2)
实际上为什么不将path
设置为默认的空列表?
所以使用相同的代码但略有不同的参数:
# Original
def DFS(gr, s, path):
# Modified
def DFS(gr, s, path=[]):
# From here you can do
DFS(gr, s)
答案 2 :(得分:0)
您可以按照chutsu的建议,为访问的节点使用一个空的默认值,但请谨慎使用mutable default arguments。 另外,我建议使用集合而不是列表进行常量查找。
def DFS(gr, s, visited=None):
""" Depth first search
Returns a list of nodes "findable" from s """
if visited == None:
visited = set([s])
for each in gr.neighbors(s):
if each not in visited:
visited.add(each)
DFS(gr, each, visited)
return visited