#include<iostream>
#include<algorithm>
#define MAX 10050
using namespace std;
int n,c;
int item[MAX];
int d[MAX];
bool can,visited[MAX];
void print(int k)
{
for(int i=1;i<k;i++)
cout<<item[d[i]]<<" ";//输出解
cout<<endl;
}
void backtrace(int k,int sum)
{
if(can) return;
if(sum==c){
print(k);
can=true;
}
for(int i=d[k-1];i<=n;i++)
{
if(!visited[i])
{
sum+=item[i];
visited[i]=true;
d[i]=i;
backtrace(k+1,sum);
sum-=item[i];
visited[i]=false;
}
}
}
int main()
{
cout<<"输入数的个数:"<<endl;
cin>>n;
cout<<"输入目标值:"<<endl;
cin>>c;
cout<<"依次输入每个数字的值"<<endl;
for(int i=1;i<=n;i++){
cin>>item[i];
}
d[0]=1;
// print();
backtrace(1,0);
if(!can) cout<<"No Solution!";
return 0;
}
#include<iostream>
#include<algorithm>
#define MAX 10050
using namespace std;
int n,c;
int item[MAX];
int d[MAX];
bool can,visited[MAX];
void print(int k)
{
for(int i=1;i<k;i++)
if(visited[i])
cout<<item[i]<<" ";//输出解
cout<<endl;
}
void backtrace(int k,int sum)
{
if(can) return;
if(sum==c){
print(k);
can=true;
}
//for(int i=d[k-1];i<=n;i++)
for(int i=1;i<=n;i++)
{
if(!visited[i])
{
sum+=item[i];
visited[i]=true;
// d[i]=i;
backtrace(k+1,sum);
sum-=item[i];
visited[i]=false;
}
}
}
int main()
{
cout<<"输入数的个数:"<<endl;
cin>>n;
cout<<"输入目标值:"<<endl;
cin>>c;
cout<<"依次输入每个数字的值"<<endl;
for(int i=1;i<=n;i++){
cin>>item[i];
}
// d[0]=1;
// print();
backtrace(1,0);
if(!can) cout<<"No Solution!";
return 0;
}
加d数组会让代码运行快一点