您的位置:首页 > 其它

擅长排列的小明

2013-05-05 22:45 204 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: