通过数的二进制来表示状态
比如一共有a,b,c,d,e五口水井
00100表示 c 有水,11011 表示a,b,d,e 有水
只能解决样本较少的问题,例如最多有20口水井,否则极易超时
如果超过则推荐使用双向dfs
枚举子集:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i=n;i;i=(i-1)&n) cout << i << " ";
}