您的位置:首页 > 编程语言 > Go语言

为向量法求组合问题

2015-04-13 23:15 288 查看
#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;
}
貌似没什么可说的了,原理太简单了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息