NYOJ 32--组合数【DFS】

来源:互联网 发布:圆珠笔头 知乎 编辑:程序博客网 时间:2024/05/30 04:10

组合数

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

深搜水题。

#include <cstdio>#include <cstring>int n,r,d;int a[1000];int b[1000];int dfs(int pos){if(d==r+1){for(int i=1;i<=r;i++)printf("%d",a[i]);printf("\n");}for(int i=pos;i<=n;++i){a[d]=b[i];d++;dfs(i+1);d--;}}int main (){while(scanf("%d%d",&n,&r)!=EOF){    int c=1;        for(int i=n;i>=1;i--)            b[c++]=i;d=1;dfs(1);}return 0;}


0 0