chào mọi người, em mới bắt đầu tìm hiểu về thuật toán quay lui gặp khó khăn với bài này mong mọi người giúp đỡ.
cho mảng n phần tử tìm các bộ số có k chữ số chữ số bằng tổng m cho trước.
em gặp vấn đề ở chỗ đã tìm được các bộ số bằng m rồi nhưng lại bị trùng lặp mong mng giúp đỡ chỗ này
đây là file test của em
n = 6
m = 9
k = 3
6 2 5 1 9 2
#include<iostream>
#include<cmath>
#define maxn 100
using namespace std;
int d=0;
int n,k,m;
int x[maxn],a[maxn];
void docfile(int a[maxn],int &n,int &m,int &k)
{
FILE *f = fopen("test5.5.inp","rt");
fscanf(f,"%d",&n);
fscanf(f,"%d",&m);
fscanf(f,"%d",&k);
for(int j = 1; j <= n; j++)
fscanf(f,"%d",&a[j]);
fclose(f);
}
void output()
{
cout<<++d<<" : ";
for(int i = 1; i<= k; i++)
cout<<x[i]<<" ";
cout<<endl;
}
int tong(int x[])
{
int s =0;
for(int j = 1 ;j <= k; j++)
s = s+x[j];
return s;
}
void bai5(int i)
{
for(int j = 1 ; j <= n; j++)
{
if(a[j] != 0)
{ int temp = a[j];
x[i] = a[j];
a[j] = 0;
if ( i == k && tong(x) == m ) output();
else bai5(i+1);
a[j] = temp;
}
}
}
int main()
{
int j;
docfile(a,n,m,k);
bai5(1);
return 0;
}