Algorithm 图的边

Algorithm 图的边,algorithm,depth-first-search,edges,Algorithm,Depth First Search,Edges,为了找到图的边类型,我们应用了深度优先搜索算法,我们可以使用: 树边:当[d[y],f[y]]⊂ [d[x],f[x]] 前进边:当[d[x],f[x]]时x->y⊂ [d[y],f[y]] 后缘:x->y当[d[y],f[y]]⊂ [d[x],f[x]] 交叉边:当[d[x],f[x]]∩ [d[y],f[y]]=∅ 发现时间:发现时间d[v]是在第一次看到v之前发现或完成的节点数 Finishing Time(完成时间):完成时间f[v]是在完成扩展$v$之前发现或完成的节点数 这就是我看到

为了找到图的边类型,我们应用了深度优先搜索算法,我们可以使用:

树边:当[d[y],f[y]]⊂ [d[x],f[x]]

前进边:当[d[x],f[x]]时x->y⊂ [d[y],f[y]]

后缘:x->y当[d[y],f[y]]⊂ [d[x],f[x]]

交叉边:当[d[x],f[x]]∩ [d[y],f[y]]=∅

发现时间:发现时间d[v]是在第一次看到v之前发现或完成的节点数

Finishing Time(完成时间):完成时间f[v]是在完成扩展$v$之前发现或完成的节点数

这就是我看到的图表:

以下是我发现的发现和完成时间:

算法:

Depthfirstsearch(G)
   for each v ∈ V
        color[v]=white
        p[v]=NIL
   time=0
   for each v ∈ V
       if color[v]=white then
          Visit(v)


Visit(u)
  color[u]=gray
  time=time+1
  d[u]=time
  for each v ∈ Adj[u]
       if color[v]=white then
          p[v]=u
          Visit(v)
  color[u]=black
  time=time+1
  f[u]=time
例如,当我们有[d[y],f[y]]⊂ [d[x],f[x]]我们怎么知道它是树边还是后边

我们是否必须标记每个节点的父节点,如下所示:

如果有红边,我们知道它是树边?如果是,你能解释一下原因吗


另外,jh、ia前边缘和ag不是后边缘吗?还是我错了?

您的前后边缘关系不正确-您应该交换它们。
除此之外,我建议阅读维基百科的这一段:

它包括对这些边的更直观和直接的定义以及一幅好的图片:

直接回答你的问题 例如,当我们有[d[y],f[y]]⊂ [d[x],f[x]]我们怎么能 知道它是树的边缘还是前进的边缘

如果一条边属于树-它是一条树边(所有树边满足上述关系)。
如果一条边不属于树它满足上述关系-它是一条向前的边

我们是否必须标记每个节点的父节点,如:[…]如果有红边,我们知道它是树边

是的,但是我们需要记住树的边是蓝色的,红色的边只是树的一个表示,它们指向另一个方向。因此,如果有一个红色箭头
x->y
,这意味着一个蓝色箭头
y->x
属于树(这对您来说可能很明显)。您还可以阅读生成树的定义:

另外,jh、ia前边缘和ag不是后边缘吗?还是我错了

恰恰相反:jh、ia是后边缘,ag是前边缘(因为您的后边缘和前边缘关系不正确)

更长的解释 在图形上运行DFS时,它通过在
Visit(u)
中设置
p[v]=u
(这意味着顶点
u
是输入图形生成树中顶点
v
的父级)来生成此图形的生成树的表示

您已使用红色箭头正确绘制此表示。然而,真正形成一个图的生成树的是这个图的边(确切地说是它们的子集)。因此,要知道图的蓝色
x->y
边是否属于该图的生成树,我们需要检查图片中是否有
y->x
红色边,或者换句话说,如果
x
是生成树中
y
p[y]==x
)的父项

让我们找出为什么
jh
是后缘。我们需要看看你的第二张照片:


DFS在
a
中启动。在访问顶点
c、f、g
后,它会回溯到
a
并第一次访问
d
(这会将边a->d添加到DFS正在构建的生成树中)。然后,它访问了
h,j
,现在它想访问
h
,但它已经被访问过了,
h
的发现时间比
j
要短,所以我们正在后退-这是一个后缘。

我明白了。。。但是,你能进一步解释为什么如果x是y的父元素,那么边x->y是树的边吗?另外,我正在看的练习要求我展示深度优先搜索如何在图形上工作。那么,我必须编写执行的命令,还是只需在节点处编写发现和完成时间,并在图中添加红色箭头?我不确定您是否理解树和生成树是什么?暂时忘掉父对象,看看这张pdf的第3页(有一个树边的定义):在练习中,你需要画一张像我从维基百科粘贴的图片——只需写下顶点的发现时间,并将边标记为tree/forward/back/cross。如果你能画出来,这表明你知道DFS是如何工作的。你能看看这个吗?