我将尝试编写一个递归深度优先搜索算法,它接受一个表示图的邻接表并打印出顶点的访问顺序。
我的输入是以邻接表形式存储的图:
我的输入是以邻接表形式存储的图:
graphAL2 = {0 : [1,2,3],
1 : [0,3,4],
2 : [0,4,5],
3 : [0,1,5],
4 : [1,2],
5 : [2,3] }
从那里开始,我编写了两个函数:一个主函数和一个次要函数,它们组成了这个程序。
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,因此您始终在for
循环的第一次迭代中发送递归调用dfs(key, count, graph)
。尽管我不确定为什么要检查key == 0
,或者您的算法应该如何工作。 - Blorgbeard