public boolean isIncomparable(Node a,Node b)
{
if(isReachable(a,b)||isReachable(b,a))
return false;
return true;
}
当且仅当两个节点不可比较(即,没有 from a
tob
或 from b
to的路径a
)时,它才返回 true。
我定义了一个 LinkedHashMap
LinkedHashMap<Node,ArrayList<Node>> map=new LinkedHashMap<Node,ArrayList<Node>>();
它将每个节点 N 映射到其无与伦比的元素Incomp(N)
。
for(int i=0;i<nodes.size();i++)
{
Node a=nodes.get(i);
ArrayList<Node> tmp=new ArrayList<Node>();
for(int j=i+1;j<nodes.size();j++)
{
Node b=nodes.get(j);
if(isIncomparable(a,b))
tmp.add(b)
}
map.put(a,tmp);
}
例如:假设元素是 {A,B,C,D} 具有以下关系 A>B, A>C, D>C 那么
Incomp(A)={D}
Incomp(B)={C,D}
Incomp(C)={}
Incomp(D)={}
请注意,不允许重复(即Incomp(C)={B}
,但由于 (B,C) 在Incomp(B)
我们不需要重复它)。
我被困在这里。我应该只检查Incomp(N)
元素之间的不可比性,然后将最大尺寸的密钥作为最大反链吗?换句话说,如何通过这个设置找到最大的反链?
我不能生成所有大小为 k 的子集,因为这将是低效的。