我想为定义的集创建不同的子集,并将它们存储起来以便稍后在我的建模中使用它们。例如,假设我得到C = {1,2,3},是否有任何有效的方法来获得SC = {{1},{2},{3},{1,2},{1,3}, {2,3},{1,2,3}}并稍后在约束中使用它们?
它专门用于解决旅行商问题中的未连接电路(因此任何有关解决它的建议都很受欢迎)。谢谢!
答案 0 :(得分:-1)
public IEnumerable<IEnumerable<T>> GetPowerSet<T>(List<T> list)
{
return from m in Enumerable.Range(0, 1 << list.Count)
select
from i in Enumerable.Range(0, list.Count)
where (m & (1 << i)) != 0
select list[i];
}
这应该有用。
答案 1 :(得分:-1)
Haskell着名的单行:
> filterM (const [True, False]) [1,2,3]
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]