我想写一个递归的深度优先搜索算法,需要代表图的邻接表并打印顶点的访问顺序。递归深度优先搜索算法
我的输入是存储为邻接列表的图表:
graphAL2 = {0 : [1,2,3],
1 : [0,3,4],
2 : [0,4,5],
3 : [0,1,5],
4 : [1,2],
5 : [2,3] }
从那里,我已经写2个功能,主和辅助功能,构成该程序。
import sys
def main():
count = 0
graphAL2v = {}
for key, value in graphAL2.items():
graphAL2v[key] = 0
print graphAL2v
for key in graphAL2v:
if key == 0:
dfs(key, count, graphAL2v)
def dfs(v, count, graph):
count = count + 1
graph[v] = count
for key in graph:
if key == 0:
dfs(key, count, graph)
if __name__ == "__main__":
sys.exit(main())
现在我的,如果我运行它时,输出为:
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0}
{0: 1, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0}
,并与关键0配对的第一个值不断递增,直至达到
RuntimeError: maximum recursion depth exceeded
。 for循环应该通过其余的键对值并将值更改为顶点访问的顺序,但我不确定为什么它没有这样做。
有什么想法?
由于'graph'第一个关键是0,你总是送过你的递归调用'DFS(键,计数,图) for'循环的第一次迭代。虽然我不确定你为什么要检查'key == 0',或者你的算法应该如何工作。 – Blorgbeard
@Blorgbeard基本上我将输入顶点并用0标记它们以显示它们还没有被访问过。如果一个顶点没有被访问过,它会被传入第二个函数,然后将0改变为对应于顶点访问时的数字。由于顶点0是第一次访问,它的值会从0改为1,然后在功能应该移动到下一个顶点,从0的值更改为2,等等等等 – superfluousAM