递归实现指数型枚举

在这里插入图片描述
在这里插入图片描述

本题要求实现对n以内的整数进行排列组合(只选不排)。
实现思路就是对于当前第u位数(u <= n),分为选与不选两种情况,构成了一棵二叉选择树,最终的叶节点就是答案。
为了节省空间和简化操作,使用状态压缩,对于state,第i位为1表示i这个数被选中。
#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);//用这个数

}

int main() {
	cin >> n;
	dfs(0, 0);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章