当前位置: 首页 > 知识库问答 >
问题:

迭代DFS中的边缘分类

夏飞鹏
2023-03-14

使用递归的DFS将节点标记为未访问、已发现或已完成(或白、灰、黑),可以根据三类(后边缘、树/前边缘、交叉边缘)对边缘进行分类

我们是否也可以使用算法的迭代版本(参照深度优先搜索)对边缘进行分类?

procedure DFS-iterative(G,v):
2      let S be a stack
3      S.push(v)
4      while S is not empty
5          v = S.pop()
6          if v is not labeled as discovered:
7              label v as discovered
8              for all edges from v to w in G.adjacentEdges(v) do
9                  S.push(w)

共有1个答案

姬熙云
2023-03-14

假设您在递归版本中工作。则可修改如下:

DFS(G,v):
    v.discovered = True
    for all edges from v to w in G.adjacentEdges(v) do
    if not w.discovered then
        recursively call DFS(G,w)
    v.finished = True

使用括号的思想,众所周知:

>

  • 如果一条边通向一个未被发现的顶点,那么它就是一条树边。

    所以现在唯一的问题就是让它迭代。唯一的区别是,我们现在需要操作以前递归为我们做的事情。假设每个顶点的numactivechildren设置为0,而parent设置为nil。迭代版本如下所示:

    DFS-iterative(G,v):
        let S be a stack
        S.push(v)
        while S is not empty do
            v = S.pop()
            if not v.discovered do
                v.discovered = True
                for all edges from v to w in G.adjacentEdges(v) do
                    if w.discovered do
                        w.parent.numActiveChildren = w.parent.numActiveChildren - 1
                    v.numActiveChildren = v.numActiveChildren + 1
                    w.parent = v
                    S.push(w)
    
                while v != Nil and v.numActiveChildren = 0 do
                    v.finished = True
                    v = v.parent
                    if v != Nil do
                        v.numActiveChildren = v.numActiveChildren - 1 
    

  •  类似资料:
    • 我正在为学院实现DFS和边缘分类(基于本文提供的代码:https://courses.csail.mit.edu/6.006/fall11/rec/rec14.pdf)。 斜体字母只是顶点的名称,而顶点内部的数字分别是发现时间和完成时间。边缘分为后、前或交叉;其他都是树边。 正如您所看到的,该图是按照以下顺序访问的:首先是,然后是它的邻居(在DFS之后);当没有更多可访问的邻居时,访问开始于。 为

    • TBD 参考 The Birth of an Edge Orchestrator – Cloudify Meets Edge Computing K8s(Kubernetes) and SDN for Multi-access Edge Computing deployment

    • 我有一个“用户”顶点,其中有几个用户。我有一个“邀请”顶点,它基本上讲述了一个用户发送给另一个用户的邀请。我有一个“sentTo”边,将邀请顶点与用户顶点(邀请的接收者)连接起来。我有一个“sentBy”边,将邀请顶点连接到用户顶点(发送邀请的用户)。sentBy edge有一个“on”属性,它是一个日期对象。sentBy edge还具有“inviterCount”属性,基本上是收件人用户(接收邀

    • 本文向大家介绍neo4j 创建边缘,包括了neo4j 创建边缘的使用技巧和注意事项,需要的朋友参考一下 示例            

    • 我使用精明的边缘检测器来检测输入图像的边缘。 在每个输入图像中,可以有两个对象(主对象和其中的另一个对象),如示例图像所示。因此,在这种情况下,我应该检测两条边 我根据输入图像自动确定上下阈值(使用中值和西格玛)。大多数情况下,canny工作正常,但有时当图像对比度不太好时,边缘检测失败,如以下示例所示(注意:-外边缘始终正确检测,内边缘出现问题) Canny检测到外部边界的边缘,但内部对象的边缘

    • 这是我的测试照片 我正在努力寻找卡片的边缘。但是,正如您所看到的,边缘有些模糊。 在这里找到一些建议:模糊边缘检测如何从python中的模糊图像中找到扭曲矩形的精确角点位置?,但没有一个能产生令人满意的边缘。 完整代码: