现在的位置: 首页 > 综合 > 正文

全排列应用

2013年08月09日 ⁄ 综合 ⁄ 共 651字 ⁄ 字号 评论关闭

从数组{10,20,30,40,50,60}中求出和等于60的子数组。

用布尔向量例如{0,1,0,1,0,0}来表示结果。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool ValidOrder(vector<int>::iterator it1, vector<int>::iterator it2, int * s, int total)
{
	int nSize=it2-it1;
	int sum=0;
	for(int i=0; i<nSize; i++)
	{
		if(*(it1+i)==1)
			sum+=s[i];
	}
	return sum==total;
}

void main()
{
	int X[]={10,20,30,40,50,60};
	int y=60;
	int n=sizeof(X)/sizeof(int);
	vector<int>v(6);

	for(int k=0; k<n; k++)
	{
		if(n-k-2>=0)
			fill(v.begin(), v.begin()+n-k-2, 0);
		fill(v.begin()+n-k-1, v.end(), 1);
		
		do
		{
			if(ValidOrder(v.begin(), v.end(), X, y))
			{
				copy(v.begin(), v.end(), ostream_iterator<int>(cout,"\t"));
				cout<<endl;
			}
		}while(next_permutation(v.begin(), v.end()));
	}
}

 

抱歉!评论已关闭.