X-man

导航

擅长排列的小明

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;
}

 

posted on 2013-05-05 22:45  雨钝风轻  阅读(205)  评论(0编辑  收藏  举报