dfs-组合数

dfs-组合数

排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。

现要求你用递归的方法输出所有组合。

例如n=5,r=3,所有组合为:

l 2 3   l 2 4   1 2 5   l 3 4   l 3 5   1 4 5   2 3 4   2 3 5   2 4 5   3 4 5

Input

一行两个自然数n、r(1<n<21,1<=r<=n)。

Output

所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

在这里插入图片描述
AC代码:

#include<iostream>
#include<iomanip>
using namespace std;

int n,r,a[21];

void dsf(int x,int y){
	//x为层数
	if (x>r){
		for (int i=1;i<=r;i++) cout<<setw(3)<<a[i];
		cout<<endl<<endl;
		return; 
	}
	for (int j=y;j<=x+n-r;j++){
		a[x]=j;
		cout<<x<<"  "<<y<<"  "<<j<<"  "<<x+n-r<<endl;
		for (int i=1;i<=r;i++) cout<<setw(3)<<a[i];
		cout<<endl;
		dsf(x+1,j+1);
	}
	return;
}

int main(){
	cin>>n>>r;
	dsf(1,1);
	return 0;
}
在这里插入代码片

猜你喜欢

转载自blog.csdn.net/qq_43126361/article/details/83616123