爲向量法求組合問題

#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;
}
貌似沒什麼可說的了,原理太簡單了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章