状态压缩

痴心易碎 提交于 2019-11-28 23:05:27

定义

状态压缩,实际上是将一个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)  枚举子集
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!