图形上的DFS非递归方式

问题描述 投票:1回答:1

我正在锻炼身体,有点卡住,需要帮助。假设我们在有向图上具有以下顶点和边:AB,BC,AD,CD,DC,DE,CE,EB,AE如下图所示

Graph试图找出从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个回答
1
投票

您可以通过将对压入堆栈来完成。该对将包含(node,depth)。现在最初推送(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)

我希望您对如何计算答案有了想法。

© www.soinside.com 2019 - 2024. All rights reserved.