您的位置:首页 > 其它

HLG2179 组合(dfs水水更健康)

2015-08-31 20:19 274 查看
组合
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 57(38 users)Total Accepted: 43(36 users)Rating:Special Judge: No
Description
给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。

Input
第一行是一个整数T,代表T组测试数据。

接下来T行,每行是两个正整数n(1<=n<=10), k(1<=k<=n)。

Output
对于每组数据按字典序输出所有符合条件的子集。

Sample Input
1

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

Source
2014.11.29新生赛-热身赛
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int ans[50];
bool vis[50];
void dfs(int step,int p){
if(step==k+1){
for(int i=1;i<=step-1;i++){
printf("%d%c",ans[i],i==step-1?'\n':' ');
}
return ;
}
for(int i=p;i<=n;i++){
if(!vis[i]){
vis[i]=true;
ans[step]=i;
dfs(step+1,i+1);
vis[i]=false;
}
}

}
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(vis,false,sizeof(vis));
scanf("%d%d",&n,&k);
dfs(1,1);
}

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