组合数 dfs

来源:互联网 发布:java 字符串 == 编辑:程序博客网 时间:2024/05/29 03:27

描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543542541532531521432431421321

思路:

       没怎么接触过深搜,下面是从别人那看来的。

说说自己对这题的理解,要从5个数中取3个数并且这3个数要按照降序且逆字典序排列。

递归函数y>=1时调用自身算出a[1]~a[m]的值, 当不满足y>=1的条件后,将搜索完毕的

a[1]~a[n]输出。

代码:

#include<iostream>#include<algorithm>using namespace std;int n,m,a[11];int dfs(int x, int y){int i,j;for (i=x; i>=y; i--){if (y>=1){a[y] = i;dfs(i-1,y-1);}else{for (j=m;j>0;j--)  cout<<a[j];  cout<<endl;  return 0;}}}int main(){cin>>n>>m;dfs(n,m);return 0;}


0 0