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;
}
相关文章推荐
- XYNUOJ 1116 字符串排序输出
- XYNUOJ 1913 快速查找素数
- XYNUOJ 第四次比赛 The Intervals
- xynuoj 1277: 子集和问题(dfs)
- xynuoj 1292 猴子与香蕉
- XYNUOJ 迷宫问题
- XYNUOJ 1435 混合背包
- XYNUOJ 问题 A: 汉诺塔(一)
- xynuoj迷宫问题
- xynuoj 洗牌问题
- XYNUOJ 竞赛总分
- XYNUOJ 幂次方分解
- XYNUOJ 天明的智商
- XYNUOJ 1071 译密码
- XYNUOJ 最长上升子序列
- XYNUOJ 1238: 盗梦空间
- XYNUOJ 问题 B: 彩灯统计
- XYNUOJ 1190 行车路程
- XYNUOJ 1020 求闰年
- XYNUOJ1359: 古希腊之争(二) 搜索 BFS 优先队列