枚举子集

在学习steiner tree时曾经遇到这个问题,现在总结一下。

设S表示一个01状态集,那么它的所有非空子集x可以通过以下代码枚举。

 

for (int x = S; x; x = (x-1)&S)

 

 

比如S=1011,则x分别为:1011, 1010, 1001, 1000, 0011, 0010, 0001。忽略S中第二位的0其实就是111, 110, 101, 100, 011, 010, 001。

 

posted on 2013-07-31 20:46  you Richer  阅读(144)  评论(0编辑  收藏  举报