队列组合(栈和队列)

题目描述

设计算法以求解从集合{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

样例输入 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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43506138/article/details/85626352