【问题标题】:DFS on a graph the non-recursive way图上的 DFS 非递归方式
【发布时间】:2020-02-10 00:24:12
【问题描述】:

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

试图弄清楚从 C 到 C 存在多少“行程”,不超过 3 个边。那将是两 (2) 个,C-D-C 和 C-E-B-C

到目前为止,我已经设法通过使用 DFS 和递归来解决它。我跟踪深度(即远离源的边数),当深度超过 3 时,递归函数返回。

我现在要做的是在不使用递归的情况下解决它,即使用堆栈,但我被卡住了!如果我使用类似以下的东西(伪代码):

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

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

  foreach (n.connectedVertices as c)
    s.push(c)
  depth++

然后我无法知道每个顶点应该在哪个深度上。我一直在考虑以某种方式使用一堆堆栈(为每个深度保存?)但还没有弄清楚。

任何帮助将不胜感激。

【问题讨论】:

    标签: recursion stack graph-algorithm depth-first-search directed-graph


    【解决方案1】:

    您可以通过在堆栈中推送对来做到这一点。
    该对将包含 (node , depth) 。
    现在最初 push (node , 0) 。

    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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多