Recursion 图上DFS的非递归方法

Recursion 图上DFS的非递归方法,recursion,stack,graph-algorithm,depth-first-search,directed-graph,Recursion,Stack,Graph Algorithm,Depth First Search,Directed Graph,我正在做一个练习,我有点困了,需要一些帮助。假设有向图上有以下顶点和边:AB、BC、AD、CD、DC、DE、CE、EB、AE,如下图所示 试图计算出从C到C之间存在的“trip”数量,但不超过3条边。这将是两(2),C-D-C和C-E-B-C 到目前为止,我已经通过使用DFS和递归解决了这个问题。我跟踪深度(即距离源有多少条边),当深度超过3条时,递归函数返回 我现在要做的是不使用递归来解决它,也就是说,使用堆栈,但我被卡住了!如果我使用类似以下内容(伪代码): s.create() 该对将包

我正在做一个练习,我有点困了,需要一些帮助。假设有向图上有以下顶点和边:AB、BC、AD、CD、DC、DE、CE、EB、AE,如下图所示

试图计算出从C到C之间存在的“trip”数量,但不超过3条边。这将是两(2),C-D-C和C-E-B-C

到目前为止,我已经通过使用DFS和递归解决了这个问题。我跟踪深度(即距离源有多少条边),当深度超过3条时,递归函数返回

我现在要做的是不使用递归来解决它,也就是说,使用堆栈,但我被卡住了!如果我使用类似以下内容(伪代码):


s.create()
该对将包含(节点、深度)。
现在开始推送(节点,0)

我希望你知道我们如何计算答案

s.create() <- create stack
s.push(nodeA)
depth = 0

while !s.empty
  n = s.pop()

  foreach (n.connectedVertices as c)
    s.push(c)
  depth++
s.create()
s.push(nodeA , 0)

while !s.empty
    cur_node , depth = s.pop()  
    if depth==3
        continue // if depth = 3 then we don't need to push anything .

    for each node connected with cur_node
        s.push(node , depth + 1)