c++ - 如何在图中找到所有前向和交叉边

标签 c++ c algorithm graph

我知道什么是正向和跨向。但是我发现很难在程序中实现它们以找到给定图中的所有前向和交叉边。

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用 DFS 横向对所有图边进行分类:

DFS-Visit(u)         ▷ with edge classification. G must be a directed graph

1.        color[u] ← GRAY
2.        time ← time + 1
3.        d[u] ← time
4.        for each vertex v adjacent to u
5.            do if color[v] ← BLACK
6.                then if d[u] < d[v]
7.                            then Classify (u, v) as a forward edge
8.                            else Classify (u, v) as a cross edge
9.                        if color[v] ← GRAY
10.                            then Classify (u, v) as a back edge
11.                       if color[v] ← WHITE
12.                            then π[v] ← u
13.                                 Classify (u, v) as a tree edge
14.                                 DFS-Visit(v)
15.        color[u] ← BLACK
16.        time ← time + 1
17.        f[u] ← time

如你所见here .

关于c++ - 如何在图中找到所有前向和交叉边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053672/

相关文章:

algorithm - 总和大于给定值的最小子数组的大小

c++ - 具有比较器功能和自定义参数的模板

C++ : How expensive is ofstream. tellp()?

c++ - std::isfinite(IntegralType) 可以返回 false 吗?

c++ - 如何在编译时检测到 'strict aliasing'?

java - 如何使用按位运算检查置换的十六进制整数是否与另一个匹配(性能优化)

c++ - 用指针反转字符串 C++

C:读入多个文件

C - write() 系统调用打印乱码而不是 pid_t

c - 寻找除数的有效方法