将DAG的大多数黑色顶点合并在一起,使其保持DAG状态?

时间:2015-08-15 17:59:10

标签: algorithm directed-acyclic-graphs topological-sort

我有一个DAG(有向无环图),顶点有黑色或白色两种颜色中的任何一种。我需要合并尽可能多的黑色顶点以及图形应该保持非循环的约束。因此,最终的DAG应该具有最小值。黑色顶点。这个问题的最佳算法是什么?

1 个答案:

答案 0 :(得分:1)

让图表为G =(V,E)

拓扑对图形进行排序以获得顶点列表= L(V) L(B)=从L(V)中提取的黑色顶点列表,并保持顺序。

设n =否。 L(B)中的顶点 令DVA =用0初始化的大小为n的已删除顶点的空数组。

for i = vertices 1 to n in L(B)
   if(DVA[i] == 1)
     continue;
   for j = vertices i+1 to n in L(B)
     if(DVA[j] == 1)
        continue;
     if(detect_cycle(G, i, j) == 0) //merging i and j will not create cycle
        Merge j to i in G;
        DVA[j] = 1;        

该算法适用于合并2个顶点时黑色顶点的拓扑顺序不变的事实(除了这2个顶点)。
我想这种方法会产生相当好的结果,但我不确定它是否能产生最少的最佳结果。黑色顶点。