题目描述:给定一个有n个数字的数组,给出一个数字m,要求所有和等于m的组合。
思路:从头遍历,查找当前这个数在路径中时能不能和后面的数构成和,如果可以就输出这个路径,如果加上这个数比和sum大,说明不能有当前这个数,如果现在的和比sum小,就放入路径,继续查找。
在VS2010中的程序如下:
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
void findpath(vector<int> a,vector<int> path,int n,int start,int sum){
for(int i=start;i<n;i++){//从第一个数开始遍历
sum-=a[i];
path.push_back(i);
if(sum==0){//说明找到了满足要求的一条路径
for(int j=0;j