#include<iostream>
using namespace std;
int n;
void dfs(int u, int state)
{
if(u==n)
{
for (int i=0; i<n; i++) //* 遍历已经跑出来的结果
if(state>>i & 1) //* 判断state的第i位是否为1
cout<< i + 1 << ' ';
cout<<endl;
return;
}
dfs(u+1, state); //* 第一种选择不用这个数
dfs(u+1, state | 1<<u); //* 第二种选择用这个数,即state的第u位变为1,表示我们要用这个数
}
int main()
{
cin>>n;
dfs(0, 0);
}
请问
dfs(u + 1, state);
为什么不是dfs(u + 1, state & 0 << u);
?也就是说不需要把当前位u
置零吗?dfs(u + 1, state);
仅仅是保持state
不变吧?