//从n个数里面选m个数来组合 #include<stdio.h> #include<string.h> const int maxn=1e5; int a[maxn],v[maxn],n,m; void dfs(int x) { if(x>m) { for(int i=1;i<m;i++) printf("%d ",a[i]); printf("%d\n",a[m]); return ; } for(int i=1;i<=n;i++) { if(!v[i]) { if((x>1&&i>a[x-1])||(x==1)) { v[i]=1; a[x]=i; dfs(x+1); v[i]=0; } } } } int main() { while(scanf("%d %d",&n,&m)!=EOF) { memset(v,0,sizeof(v)); dfs(1); } }
原文:https://www.cnblogs.com/aacm/p/14863945.html