2016-01-27 44 views
0
def _all_simple_paths_graph(G, source, target, cutoff=None): 
if cutoff < 1: 
    return 
visited = [source] 
stack = [iter(G[source])] 
while stack: 
    children = stack[-1] 
    child = next(children, None) 
    if child is None: 
     stack.pop() 
     visited.pop() 
    elif len(visited) < cutoff: 
     if child == target: 
      yield visited + [target] 
     elif child not in visited: 
      visited.append(child) 
      stack.append(iter(G[child])) 
    else: #len(visited) == cutoff: 
     if child == target or target in children: 
      yield visited + [target] 
     stack.pop() 
     visited.pop() 

我在此link上找到该代码。栈[-1]在伪代码中意味着什么?

但不明白某些语句,如下

  • children = stack[-1] //是什么stack[-1]意思?

  • child = next(children, None) //是孩子列表还是孩子列表?

  • stack = [iter(G[source])] //什么是iter

  • 如果孩子是None://猜测孩子是否为空(孩子是一个列表)。

  • visited = [source] //这是什么?

  • yield visited + [target] //收益?

任何人都可以向我解释吗?我想重写它在C.

回答

3

它看起来像一个Python代码


1) stack[-1]意味着它会给最后一个元素。
2) children是一个变量,它通过这段代码保存列表 stack

children = stack[-1] 

child是什么next()函数返回的最后一个元素,但它的外观,它也像一个变量。


4) 如果孩子是无: 如果 next()函数返回 None

+0

你能解释一下最后两个行? – arslan

+0

@alim,我认为它是模块本身定义的东西之一。它不是语言的一部分。 – Haris

+0

非常感谢,我没有意识到它是python。 – arslan

相关问题