您可以通过添加边缘来实现这一点。提出一种通过添加尽可能少的边来解决此问题的策略 输入图上的顶点可以没有边。
示例: 为了以最有效的方式求解该图,我们只需要添加 2 条边:
请记住,算法不需要完美,也不需要编写任何代码(除非你想:))。
考虑一个有 m 个入度为 0 的顶点和 n 个出度为 0 的顶点的 DAG:
显然,您需要添加 m 个传入入度 0 顶点的边,以及 n 个从出度 0 顶点传出的边,因此您可以期望的最好结果是 max(m,n) 个新边。我们可以实现这一目标。
首先,如果 m > n,则连接入度为 0 的顶点,直到 m = n。否则连接出度 0 的顶点直到 m = n。
现在我们有 m=n,我们将维持它: