codevs 4064 组合 x

很久之前发过啦~不过删掉了...再发一下

4064 组合

 时间限制: 1 s

 空间限制: 256000 KB

 题目等级 : 黄金 Gold

题解

 查看运行结果

题目描述 Description

组合就是从n个元素中抽出r个元素(不分顺序且r <  n),我们可以简单地将n个元素理解为自然数12n,从中任取r个数。 

例如n=5,m=3所有组合为:

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

输入描述 Input Description

输入两个正整数n,m

输出描述 Output Description

输出n个数抽选r的所有抽法。

样例输入 Sample Input

5 3

样例输出 Sample Output

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

 

 

数据范围及提示 Data Size & Hint

m<=n<=8

思路:裸的深搜2333

坑点:数组范围要开的稍大一点,不然会RE

代码:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int n,r,cnt;
bool v[999];
int ans[999];

void print()
{
    for(int i=1;i<=cnt;i++)
    {
        printf("%d ",ans[i]);
    }
    printf("\n");
}

void dfs(int now)
{
    v[now]=1;
    ans[++cnt]=now;
    if(cnt==r) print();
    for(int i=1;i<=n;i++)///find r (ge) number
    {
        if(!v[i] && i>now)
        {
            dfs(i);
            v[i]=0;
            cnt--;
        }
    }
}

int main()
{
    scanf("%d%d",&n,&r);
    int Ms=n-r+1;
    for(int i=1;i<=Ms;i++)
    {
        memset(v,0,sizeof(v));
        memset(ans,0,sizeof(ans));
        cnt=0;
        dfs(i);
    }
    return 0;
}
View Code

 

posted @ 2017-06-22 10:08  夜雨声不烦  阅读(136)  评论(0编辑  收藏  举报