#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#define size 5
struct plist{
int id;
int status;
int num;
struct plist *ar[size*2-1];
};
int isExists(struct plist *sign,struct plist **soure);
int sumOfArray(int *ar);
void copyOfarray(int *soure,int *desk);
void execute(struct plist **soure,struct plist **p,struct plist **temp,int layer,int *desk_a,int *desk_b)
{
int i = 0,ii = 0,a=0,b=0;
int sa=0,sb=0;
int desk_a_temp[size];
int desk_b_temp[size];
if(layer < size)
{
for(i = 0; i < size*2-1;i++)
{
if(p[i]->status == 0)
{
p[i]->status = 1;
temp[layer] = p[i];
execute(soure,p[i]->ar,temp,layer+1,desk_a,desk_b);
p[i]->status = 0;
}
}
}else
{
for(i = 0 ; i < size*2; i++)
{
if(isExists(soure[i],temp)==1)
{
desk_a_temp[a] = soure[i]->num;
sa+=soure[i]->num;
a++;
}else
{
desk_b_temp[b] = soure[i]->num;
sb+=soure[i]->num;
b++;
}
}
if(abs(sa-sb)<abs(sumOfArray(desk_a)-sumOfArray(desk_b)))
{
copyOfarray(desk_a_temp,desk_a);
copyOfarray(desk_b_temp,desk_b);
}
}
}
int isExists(struct plist *sign,struct plist **soure)
{
int i;
for(i = 0; i < size; i++)
{
if(sign == soure[i])
{
return 1;
}
}
return 0;
}
int sumOfArray(int *ar)
{
int i,value = 0;
for(i = 0; i < size; i++)
{
value +=ar[i];
}
return value;
}
void copyOfarray(int *soure,int *desk)
{
int i;
for(i = 0; i < size; i++)
{
desk[i] = soure[i];
}
}
void printOfArray(int * array)
{
int i;
printf("/n");
for(i = 0; i < size; i++)
{
printf("%d/t",array[i]);
}
printf("/n");
}
void main()
{
int soure_a[size] = {1,2,3,4,5};
int soure_b[size]={6,7,8,9,1000};
int desk_a[size],desk_b[size];
struct plist *p[size*2];
struct plist * temp[size];
int i,ii , j;
srand((unsigned)time(NULL));
for(i = 0; i < size; i++)
{
soure_a[i] = rand()%10;
soure_b[i] = rand()%10;
}
copyOfarray(soure_a,desk_a);
copyOfarray(soure_b,desk_b);
for(i = 0; i < size*2; i++)
{
p[i] = (struct plist *)malloc(sizeof(struct plist));
p[i]->status = 0;
p[i]->id = i;
if(i < size)
{
p[i]->num = soure_a[i];
}else
{
p[i]->num= soure_b[i-size];
}
}
for(i = 0; i < size*2; i++)
{
for(j = 0 , ii = 0; j < size*2 ;j++)
{
if( i != j)
{
p[i]->ar[ii]=p[j];
ii++;
}
}
}
for(i = 0; i < size*2; i++)
{
p[i]->status = 1;
temp[0] = p[i];
execute(p,p[i]->ar,temp,1,desk_a,desk_b);
p[i]->status = 0;
}
printf("打印整理前的soure_a");
printOfArray(soure_a);
printf("打印整理前的soure_a:%d/n",sumOfArray(soure_a));
printf("打印整理前的soure_b");
printOfArray(soure_b);
printf("打印整理前的soure_b:%d/n",sumOfArray(soure_b));
printf("整理前他们的差是:%d/n/n",abs(sumOfArray(soure_a)-sumOfArray(soure_b)));
printf("打印整理后的的desk_a");
printOfArray(desk_a);
printf("打印整理后的desk_a:%d/n",sumOfArray(desk_a));
printf("打印整理后的desk_b");
printOfArray(desk_b);
printf("打印整理后的soure_b:%d/n",sumOfArray(desk_b));
printf("整理后他们的差是:%d/n/n",abs(sumOfArray(desk_a)-sumOfArray(desk_b)));
}