我有一个DAG(有向无环图),顶点有黑色或白色两种颜色中的任何一种。我需要合并尽可能多的黑色顶点以及图形应该保持非循环的约束。因此,最终的DAG应该具有最小值。黑色顶点。这个问题的最佳算法是什么?
答案 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个顶点)。
我想这种方法会产生相当好的结果,但我不确定它是否能产生最少的最佳结果。黑色顶点。