题目描述
设计算法以求解从集合{1…n}中选取k(k<=n)个元素的所有组合。例如,从集合{1…4}中选取2个元素的所有组合的输出结果为:1 2,1 3,1 4,2 3, 2 4,3 4。
输入
4 2
输出
1 2
1 3
1 4
2 3
2 4
3 4
扫描二维码关注公众号,回复:
4780664 查看本文章
样例输入 Copy
3 2
样例输出 Copy
1 2
1 3
2 3
分析:
本题虽然说是用栈和队列来做,但可惜本人太菜。只会用回溯来做。
#include"stdio.h"
#include"string.h"
int n,k;
int a[10000],vis[10000];
void dfs(int j,int digit[])
{
int i;
if(j==k+1)
{
for(i=1; i<j-1; i++)
printf("%d ",digit[i]);
printf("%d\n",digit[i]);
return ;
}
else
{
for(i=j; i<=n; i++)
{
if(vis[i]==1&&digit[j-1]<a[i])
{
digit[j]=a[i];
vis[i]=0;
dfs(j+1,digit);
vis[i]=1;
}
}
}
}
int main()
{
int i,j;
int digit[10000];
while(~scanf("%d%d",&n,&k))
{
for(i=1; i<=n; i++)
{
a[i]=i;
digit[i]=0;
vis[i]=1;
}
j=1;
dfs(j,digit);
}
}