题解:P10448 组合型枚举

组合数,可用 dfs 解决,思路就是先选一个数,并标记,后面依次寻找未标记的数,构造成功后输出。

#include<bits/stdc++.h>
using namespace std;
int n, r;
int a[100000];//存放选出的数
bool b[100000];//标记
void print(){//依次输出
	for(int i = 1; i <= r; i ++){
		cout << a[i] << " ";
	}
	printf("\n");
}
void dfs(int k){
	if(k == r + 1){//选完了
		print();
		return;
	}
	for(int i = a[k - 1] + 1; i <= n; i ++){
		if(b[i] == 0){//未标记
			a[k] = i;
			b[i] = true;
			dfs(k + 1);
			b[i] = false;//用完就解除标记
		}
	}
}
int main(){
	scanf("%d%d", &n, &r);
	dfs(1);
	return 0;
}

posted on 2024-05-15 20:33  zhangzirui66  阅读(33)  评论(0)    收藏  举报  来源

导航