S
sulekhasweety
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*,void*);
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,sizeof(bln));
qsort(a,size,sizeof(int),compare);
for(i=0;i < size;i++)
{
printf("\n i = %d",i);
if( subsetsum(a,size,sum,selected,i))
printanswer(a,size,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 == FALSE && a <= sum)
{
selected = TRUE;
if(subsetsum(a,n,sum - a,selected,i+1))
return TRUE;
selected = FALSE;
}
return FALSE;
}
void printanswer(int* a,int n,bln* selected)
{
int i;
for(i=0;i<n;i++)
if(selected)
printf("\t%d",a);
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*,void*);
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,sizeof(bln));
qsort(a,size,sizeof(int),compare);
for(i=0;i < size;i++)
{
printf("\n i = %d",i);
if( subsetsum(a,size,sum,selected,i))
printanswer(a,size,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 == FALSE && a <= sum)
{
selected = TRUE;
if(subsetsum(a,n,sum - a,selected,i+1))
return TRUE;
selected = FALSE;
}
return FALSE;
}
void printanswer(int* a,int n,bln* selected)
{
int i;
for(i=0;i<n;i++)
if(selected)
printf("\t%d",a);
puts("");
}
int compare(void* e1,void* e2)
{
return *(int*)e2 - *(int*)e1;
}