您的位置:首页 > 其它

XYNUOJ 1275: 组合的输出

2018-03-17 17:29 246 查看

1275: 组合的输出

时间限制: 1 Sec  内存限制: 128 MB
提交: 17  解决: 9
[提交][状态][讨论版]

题目描述

[问题描述]从n个数中取出r个元素,输出所有组合
[输入格式]
一行两个自然数n和r (1<n<21,1<=r<=n)
[输出格式]
所有的组合,每个组合占一行,其中的元素从小到大排序,用一个空格隔开,所有组合按字典序。
[输入样例]
5 3
[输出样例]
1 2 3
1 2 4
1 2 5
1 3 4
……(太多,此处省略)

来源

搜索 简单的深搜刚开始用了一个next_permutation函数,但是如果剩余的位数多了就会出现重复,比如,如果从10个数里选择3个进行排序,则会出现7次重复#include<stdio.h>
#include<string.h>
int n,r;
int visit[25],a[25],b[25];
int dfs(int k,int flag){
if(k==r+1){
for(int i=1;i<r;i++){
printf("%d ",b[i]);
}
printf("%d\n",b[r]);
}
else{
for(int i=0;i<n;i++){
if(!visit[i]&&a[i]>flag){
visit[i]=1;
b[k]=a[i];
flag=a[i];
dfs(k+1,flag);
visit[i]=0;//回溯
}
}
}
}
int main(){
while(scanf("%d %d",&n,&r)!=EOF){
memset(visit,0,sizeof(visit));
for(int i=0;i<n;i++){
a[i]=i+1;
}
dfs(1,0);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: