int job[6][2]={
{3,8},
{12,10},
{5,9},
{2,6},
{9.3},
{11,1}
};
int x[6],bestx[6],f1=0,bestf,f2[7]={0};
void try(int i);
void swap(int a,int b);
int main(void)
{
int i,j;
bestf=32767;
for(i=0;i<6;i++)
x[i]=i;
try(0);
for(i=0;i<6;i++)
printf("%d ",bestx[i]);
printf("\nbestf=%d\n",bestf);
return 0;
}
void try(int i)
{
int j;
if(i==6)
{
for(j=0;j<6;j++)
bestx[j]=x[j];
bestf=f2[i];
}
else
{
for(j=i;j<6;j++)
{
f1=f1+job[x[j]][0];
if(f2[i]>f1)
f2[i+1]=f2[i]+job[x[j]][1];
else
f2[i+1]=f1+job[x[j]][1];
if(f2[i+1]<bestf)
{
swap(i,j);
try(i+1);
swap(i,j);
}
f1=f1-job[x[j]][0];
}
}
}
void swap(int i,int j)
{
int temp;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}