http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=113
题意:
从1~m的m个数中选出n(n<m)个数的组合,输出所有的组合。
#include<stdio.h> int n,m, a[10]; bool bz[10];//标记数字是否已经被用过 int DFS(int k) { if (k==n)//搜出来的长度等于要求的长度,输出该序列,由于是从小到大搜索的所以输出的时候也是从小到大的 { for (int i=0; i<n; i++) printf("%d",a[i]); printf("\n"); } else//不等于要求的长度,继续添加数 { for (int i=1; i<=m; i++) { if ( !bz[i] ) { a[k]=i;//将搜索到的数存起来 bz[i]=true;//标记为已访问 DFS(k+1);//搜索下一个数 bz[i]=false;//上一个序列搜索完之后,重新标记为未访问 } } } return 0; } int main() { int _case; scanf("%d",&_case); while(_case--) { scanf("%d %d",&m,&n); DFS(0);//从第一位开始搜索 } return 0; }