C语言排列组合的实现

本文介绍了如何使用C语言实现排列组合算法。通过设置记录数组ver[]标记元素选取状态,先选择未被选取的元素填充结果数组b[],然后递归地在剩余元素中选取,直到达到所需数量。代码示例展示了如何按顺序选取元素,重点关注元素的选取而非顺序。" 112107588,10295555,Elasticsearch集群管理与商品搜索实践,"['Elasticsearch', '数据库管理', '可视化工具', '微服务', '数据同步']
摘要由CSDN通过智能技术生成

排列算法我们不但关心元素是否选取,还关心选取的顺序。设置数组a[]的记录数组ver[],若a[i]被选则ver[i]=1,否则为0。

n个数中任取一个未被选取的a[i]使得b[0]=a[i],并标记ver[i]=1。然后选取下一个元素b[1]……如果选取的元素个数达到要求就输出数组b。

函数代码如下:

void p(int m,int k)    //选取m个排列,开始选第k个
{
    int i;
    if(k==m)
    {
        for(i=0;i<m;i++)
          printf("%d",b[i]);
        printf("\n");
        count++;
    }
    else
    {
        for(i=0;i<N;i++)
        {
            if(ver[i]==0)            //第i个元素没有被选取
            {
                b[k]=a[i];           //选取a[i]作为第k个元素
                ver[i]=1;            //标记选取元素
                p(m,k+1);            //选取k+1个元素
                ver[i]=0;            //回溯,继续搜索     
            }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值