#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) cout << i + 1 << " "; cout << endl; return ; } dfs(u + 1, state); // 不用这个数 dfs(u + 1, state | 1 << u); // 用这个数,把这个位置置为1 } int main() { cin >> n; dfs(0, 0); // 第一个位置表示 从0开始,第二个位置:用一个数来表示当前的方案是什么(用一个二进制数来表示一个集合) return 0; }