该图的边(Edges of the graph)

2019-10-21 10:47发布

为了找到那种图形的边缘,在此我们采用了深度优先搜索算法,我们可以这样做:

树边:X - >ÿ当[d [Y]中,f [Y]]⊂[d [X]中,f [X]]

前边缘:X - >ÿ当[d [X]中,f [X]]⊂[d [Y]中,f [Y]]

后边缘:X - >ÿ当[d [Y]中,f [Y]]⊂[d [X]中,f [X]]

横边缘:X - >ÿ当[d [X]中,f [X]]∩[d [Y]中,f [Y]] =∅

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

完成时间 :完成时间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后缘? 还是我错了?

Answer 1:

您的前进和后退边的关系是不正确的 - 你应该换的。
除此之外,我建议阅读维基百科这样一段话:
http://en.wikipedia.org/wiki/Depth-first_search#Output_of_a_depth-first_search
它包括这些边缘和良好的图像的更直观的和直接的定义:

直接回答您的问题

当我们的情况为例[d [Y],F [Y]⊂[d [X],F [X],我们怎么能知道,如果它是树的边缘或前缘

如果一个边缘属于树 - 它是树边缘(和所有树边缘满足上述的关系)。
如果边缘不属于树它满足上面的关系-这是一个前边缘。

我们是否有标记每个节点的父亲,这样的:[...]如果有红边,我们知道,这是树的边缘?

是的,但我们需要记住,树边是蓝色和红色边的树只是一种表象,他们在另一个方向指向。 所以,如果有一个红色箭头x -> y ,这意味着一个蓝色箭头y -> x属于树(它可能是你明显)。 您还可以读取生成树的定义:
http://en.wikipedia.org/wiki/Spanning_tree#Definitions

另外,也没有JH,IA前边缘和Ag后缘? 还是我错了?

这正是周围的其他方法:JH,IA回来边缘,AG是一家前缘(因为你的背部和前部边缘的关系是不正确的)。

更详细的解释

当你在图上运行DFS时,它产生此图的生成树的表示通过设置p[v]=uVisit(u)这意味着顶点u是顶点的父v中的生成树输入图)。

你已经绘制正确使用红色箭头这种表示。 然而,究竟是什么形成了一个图的生成树是该图(或其中的一个子集,以准确)的边缘。 因此,要知道,如果一个蓝色的x -> y图形的边缘属于这个图的生成树,我们需要检查,如果有一个y -> x的红色边缘,您的图片,或者换句话说,如果x是的父yp[y] == x在生成树)。

让我们来看看为什么jh是后缘。 我们需要看你的第二个画面:

在DFS开始于a 。 它已访问的顶点后c,f,g它回溯到a和访问d首次(这增加了边缘- > d生成树的DFS正在建设)。 然后,访问h,j ,现在它想参观h ,但是它已经被访问和h具有较小的发现时间比j ,所以我们搬回-这是一个底部。



文章来源: Edges of the graph