深度搜索(递归)的应用 求一个数组中和为某特定值的元素集合
#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) 收藏 举报