定义
状态压缩,实际上是将一个30左右长度的bool数组用一个int来表示。为什么呢?众所周知,bool类型只有0,1两种两种类型。而计算机又是用二进制来存储数字,加之强大的位运算功能,我们便可以更改整数在二进制下表示的每一位的数字,来表示不同的状态。由于其与位运算密切相关,所以我们先来讨论一下位运算的事情。
位运算
不做演示,可以自行演示验证
S是原集合
S&(1<<(k-1)) 取出第k位
^ 将第k位取反
| 将第k位强制变1
S^(1<<k-1) 取补集
S&(-S) 取出右起第一个1 ,减掉这个结果数就更新状态 lowbit
S|A==S A是S的子集
for(x=s;x;s&(x-1) 枚举子集