这就是一个dfs递归的思想,感觉不太好理解,自己动手模拟一下吧
AC代码:
代码语言:javascript复制#include <iostream>
#include <cstring>
using namespace std;
int temp[5050];
int num;
void dfs(int n,int m){
for(int i=n;i>=1;i--){ // 从n开始从大到小递归
temp[m] = i; // 记录i
if(m>1){ // 当记录的数不够m个时进行递归
dfs(i-1,m-1); // 下一层比上一层小1
}
else{ // 当已经记录的数够了m个时输出
for(int i=num;i>=1;i--){
cout<<temp[i];
}
cout<<endl;
}
}
}
int main()
{
int n,m;
while(cin>>n>>m){
num = m; // 标记个数
dfs(n,m);
}
return 0;
}
/***
[来源] NYOJ 32
[题目] 组合数
[思路]
递归思想
[输入]
5 3
[输出]
543
542
541
532
531
521
432
431
421
321
*/