Hi ,
this is the program showing implementation of a* algorithm, given n
integers and a sum m ,write a program to find the set of integers
summing to m using a* algorithm.
but i am not getting the o/p correct , i am getting only one set of
integers, can any one point the errors/corrections required ?
#include<stdio. h>
#include<stdlib .h>
#include<string .h>
typedef enum {FALSE,TRUE}bln ;
int subsetsum(int*, int,int,bln* ,int);
int compare(void*,v oid*);
void printanswer(int *,int,bln*);
int main(void)
{
int a[] = {5,3,4,8,9,6};
int sum = 15;
int size = sizeof(a)/sizeof(int);
int i;
bln *selected = calloc(size,siz eof(bln));
qsort(a,size,si zeof(int),compa re);
for(i=0;i < size;i++)
{
printf("\n i = %d",i);
if( subsetsum(a,siz e,sum,selected, i))
printanswer(a,s ize,selected);
memset(selected ,FALSE,size);
}
return EXIT_SUCCESS;
}
int subsetsum(int *a,int n,int sum,bln *selected ,int start)
{
int i=start;
if(sum == 0)
return TRUE;
if(selected[i] == FALSE && a[i] <= sum)
{
selected[i] = TRUE;
if(subsetsum(a, n,sum - a[i],selected,i+1))
return TRUE;
selected[i] = FALSE;
}
return FALSE;
}
void printanswer(int * a,int n,bln* selected)
{
int i;
for(i=0;i<n;i++ )
if(selected[i])
printf("\t%d",a[i]);
puts("");
}
int compare(void* e1,void* e2)
{
return *(int*)e2 - *(int*)e1;
}
this is the program showing implementation of a* algorithm, given n
integers and a sum m ,write a program to find the set of integers
summing to m using a* algorithm.
but i am not getting the o/p correct , i am getting only one set of
integers, can any one point the errors/corrections required ?
#include<stdio. h>
#include<stdlib .h>
#include<string .h>
typedef enum {FALSE,TRUE}bln ;
int subsetsum(int*, int,int,bln* ,int);
int compare(void*,v oid*);
void printanswer(int *,int,bln*);
int main(void)
{
int a[] = {5,3,4,8,9,6};
int sum = 15;
int size = sizeof(a)/sizeof(int);
int i;
bln *selected = calloc(size,siz eof(bln));
qsort(a,size,si zeof(int),compa re);
for(i=0;i < size;i++)
{
printf("\n i = %d",i);
if( subsetsum(a,siz e,sum,selected, i))
printanswer(a,s ize,selected);
memset(selected ,FALSE,size);
}
return EXIT_SUCCESS;
}
int subsetsum(int *a,int n,int sum,bln *selected ,int start)
{
int i=start;
if(sum == 0)
return TRUE;
if(selected[i] == FALSE && a[i] <= sum)
{
selected[i] = TRUE;
if(subsetsum(a, n,sum - a[i],selected,i+1))
return TRUE;
selected[i] = FALSE;
}
return FALSE;
}
void printanswer(int * a,int n,bln* selected)
{
int i;
for(i=0;i<n;i++ )
if(selected[i])
printf("\t%d",a[i]);
puts("");
}
int compare(void* e1,void* e2)
{
return *(int*)e2 - *(int*)e1;
}
Comment