深度搜索(递归)的应用 求一个数组中和为某特定值的元素集合

#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int A[8]={2,2,3,4,5,8,10,12}; 
int Sum[8]={0}; 
stack<int> S; 


//index 表示元素个数 
//sum 表示要求的和 
void makeSum(int index,int sum){ 

 if(sum==0){//满足条件,输出栈中的所有元素 
  stack<int> temp=S; 
  while(!temp.empty()){ 
   cout<<temp.top()<<" "; 
   temp.pop(); 
  } 
  cout<<endl; 
  return; 
 } 
 for(int i=index-1;i>=0 && sum<=Sum[i];i--){ 
  if(A[i]<=sum){ 
   S.push(A[i]);//当前元素入栈 
   makeSum(i,sum-A[i]); 
   S.pop(); 
  } 
 }        

void main(){ 
 Sum[0]=A[0];// Sum 用来计算前n项和,减少没必要的计算,但需要花费O(n)的空间 
 for(int i=1;i<8;i++){ 
  Sum[i]=A[i]+Sum[i-1]; 
 } 
 makeSum(8,14); 

posted on 2013-10-01 17:00  lovelace86  阅读(523)  评论(0)    收藏  举报

导航