2017-09-22 32 views
0

比方说,我们有一组对象的A1,A2,...的鸿沟对象与约束

,我们还有空数组G1,G2,...克每一个都不可能只有一些包括的对象,并且具有包含对象的特定数量,例如:

  • G1可以包括〔A1,A5,A8]必须含有2个对象
  • G2可以包括[A5,A6,A7, a9,a10]必须包含3个物体
  • ...
  • 克可包括〔A1,A6,A8,A10]必须包含4个对象

什么是检查是否有可能分配阵列之间的物体(它是没有必要使用所有的最好的算法对象)与上述限制条件,并尽可能获得该分布?

+0

是其保证对象的那笔其中(G1 ,.. gm)必须包含= n? – marvel308

+0

@ marvel308没有。我编辑了这个问题 – Lev

+0

如果gi不包含所需数量的ai,它会是无效的吗? – marvel308

回答

2

它是一个流动问题我们如何

  1. 假设具有与容量的边缘到每个艾一个源S = 1
  2. 有从艾边缘到GJ如果GJ可以包括艾。容量将等于1

  3. 它们是从每个Gj到接收器的边缘,其容量等于其必须具有的值。

  4. 现在,如果我们运行最大流量,每个Ai将被映射到Gj。总流量应等于从Gj到汇的权重之和。
  5. 如果总和有效,那么只需获取流中的映射。否则它是无效
0

Ñ是物体的总数和是阵列的总数。

x=n; 
y=m+1; 
arangement_possible=true; 
while(y>=2) 
{ 
    if(x<=0) 
    { 
     arrangement_possible = false; 
     break; 
    } 
    x=x-y; 
    y=y-1; 
} 

如果安排是可能的,那么这样的安排可能不是。

CHK此条件

(((m个(m + 1))/ 2)-1)< = N

+0

你的算法不能满足数组约束(关于它们可以拥有的对象),例如g1只能包含[a1,a5,a8] – Lev

+0

好吧,所以你想chk那么你需要循环然后通过每个数组找到它。 – subha

+0

这不是一个解决方案。检查marvel308的答案 – Lev