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