时间限制: 1000 MS 内存限制: 65536 K
提交数: 362 (0 users) 通过数: 229 (221 users)
问题描述
给1到N,N个数,要你从中选取M个出来,请输出每一种的选取情况(根据序列字典序输出,即两个序列比大小,第一位小的小,若相等第二位小的小,若相等第三位小的小……)。
输入格式
输入一行,包括两个整数N,M。(2<M<N<10)
输出格式
输出若干行,每行表示一个组合方式,按字典序输出。
样例输入
4 3
样例输出
1 2 3
1 2 4
1 3 4
2 3 4
来源
xmu
#include <stdio.h>
int perm[15] = { 0 };
int ptr_perm = 0;
int has_chosen[15] = { 0 };
void permutation(int n, int m, int k)
{
if (m == 0)
{
int i;
for (i = 0; i < ptr_perm; ++i)
printf("%d ", perm[i]);
printf("\n");
return;
}
int i;
for (i = k; i <= n; ++i)
{
if (!has_chosen[i])
{
perm[ptr_perm++] = i;
has_chosen[i] = 1;
permutation(n, m - 1, i + 1);
has_chosen[i] = 0;
ptr_perm--;
}
}
}
int main()
{
int n, m;
scanf("%d %d", &n, &m);
permutation(n, m, 1);
return 0;
}