组合 | ||||||
|
||||||
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> int a[11]; int visit[11]; int n,k; void dfs(int d, int q) { if(d == k) { printf("%d",a[0]); for(int i = 1; i < k; i++) printf(" %d",a[i]); printf("\n"); return; } for(int i = q; i <= n; i++) { if(!visit[i]) { visit[i] = 1; a[d] = i; dfs(d+1,i+1); visit[i] = 0; } } } int main() { int T; scanf("%d",&T); while(T--) { memset(a,0,sizeof(a)); scanf("%d%d",&n,&k); dfs(0,1); } return 0; }
时间: 2024-10-12 19:45:08