有向图的深度优先生成树 ——— 树枝边,前向边,后向边,横叉边的辨析

设 num[i] 为访问 i 节点 的 dfs 序,bool 变量 vis[i] 表示 i 节点是否被访问过了。 现有一条有向边 ( u, v)。

若 num[v] > num[u],则边 ( u, v ) 为树枝边或前向边

  • 若 vis[v] == false,则该边为树枝边
  • 若 vis[v] == true,则该边为前向边

若 num[v] < num[u],则边 ( u, v ) 为后向边或横叉边

这时需从节点 u 开始往前回溯 (在dfs时处理出来一个 father[i] 数组),看是否能回溯到 v 点

  • 若点 v 是点 u 的祖先(即可以回溯到),则该边为横叉边
  • 若点 v 不是点 u 的祖先,则该边为横叉边

参考:深度优先生成树及其应用 —— llhthinker (博客

猜你喜欢

转载自www.cnblogs.com/BruceW/p/11122863.html