- 输入
- 输入n、r。
- 输出
- 按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
- 样例输入
-
5 3
- 样例输出
-
543 542 541 532 531 521 432 431 421 321
#include <stdio.h> #include<string.h> int m,n; int vis[20]; int res[20]; int arr[20]; void DFS(int a,int b,int step) { if(a>m+1) return ; if(step==n+1) { for(int i=1;i<n;++i) printf("%d",res[i]); printf("%d\n",res[n]); return ; } res[b]=arr[a]; DFS(a+1,b+1,step+1); DFS(a+1,b,step); } int main() { while(~scanf("%d%d",&m,&n)) { int j=0; for(int i=m;i>=1;--i) { arr[++j]=i; } DFS(1,1,1); } return 0; }
#include <stdio.h> #include<string.h> int m,n; int vis[20]; int res[20]={100}; void DFS(int step) { if(step==n+1) { for(int i=1;i<n;++i) printf("%d",res[i]); printf("%d\n",res[n]); } for(int i=m;i>=1;--i) { if(!vis[i]&&i<res[step-1]) { res[step]=i; vis[i]=1; DFS(step+1); vis[i]=0; } } } int main() { while(~scanf("%d%d",&m,&n)) { memset(vis,0,sizeof(vis)); DFS(1); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-11 02:47:25