oracle递归生成部门全路径,递归图遍历:如何生成并返回所有路径?

在Python中使用递归时需要小心一点,因为对递归深度的预设限制非常低,并且如果递归太深,就会出现诸如RuntimeError:cmp中超过最大递归深度的错误。在

当我试图运行你的代码时,我得到一个错误:类型错误:无法连接'str'和'NoneType'对象。这是因为函数只在start==finish时返回一个值,也就是说,在您的示例中,当您再次到达“C”时。因为函数的else部分没有return,所以如果start,它将返回特殊值None!=结束。Python不允许将None添加到字符串中,这解释了错误。在

下面的代码实现了我认为您正在尝试的操作,即返回从startNode到endNode的所有路径的列表。我在这里将图形作为输入参数,并返回路径列表。它需要两个额外的参数,allPaths和pathSoFar,以跟踪所有路径和当前路径的列表。这只是一个例子,说明如何使用递归来实现这一点。这个代码有几个问题:

1)它使用递归,正如我前面所说,在Python中,递归不是一个好主意,除非增加预先设置的限制。在

2)不能正确处理循环。如果图中有循环,此函数将继续运行,直到达到递归极限。试着用A作为开始和结束节点来运行它。在def generatePaths(theGraph, startNode, endNode, allPaths, pathSoFar=""):

"""

Recursive function. Finds all paths through the specified

graph from start node to end node. For cyclical paths, this stops

at the end of the first cycle.

"""

pathSoFar = pathSoFar + startNode

for node in theGraph[startNode]:

if node == endNode:

allPaths.append(pathSoFar + node)

else:

generatePaths(theGraph, node, endNode, allPaths, pathSoFar)

graph = {"A":["B", "D", "E"], "B":["C"], "C":["D", "E"], "D":["C", "E"], "E":["B"]}

paths = []

generatePaths(graph, "C", "C", paths)

print paths

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值