为向量法求组合问题

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>

/*
 *位向量法解决组合问题,貌似是最易理解的方式
 *建立一个向量,0表示不输出该位置上是字符
 *              1表示输出字符
 *所以这个问题太简单了,就是一个二叉树
 *等到深度上限,根据向量数组输出对应的值
 *
*/

using namespace std;
const int maxn=1010;
int vec[maxn];
string input;
int len,cnt;

void comb(int d)
{
    if(d==len)
    {
        cnt++;
        //第一次都是0,什么也不输出,直接跳过
        if(cnt==1)
            return;
        for(int i=0;i<len;i++)
            if(vec[i])
                cout<<input[i]<<" ";
        cout<<endl;
        //这个要反回,否则又是一路到头撞墙了
        return;
    }
    //二叉树的遍历
    vec[d]=0;
    comb(d+1);
    vec[d]=1;
    comb(d+1);
}
int main()
{
    while(cin>>input)
    {
        cnt=0;
        memset(vec,0,sizeof(vec));
        len=input.length();
        comb(0);
    }
    return 0;
}
貌似没什么可说的了,原理太简单了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值