这是回溯算法,批作业处理的程序,各位高手们帮我调下,小弟谢了先
class Flowshop
{
int m[][],x[],bestx[],f2[],f1,f,bestf,n;
int Flow(int m[][],int n,int bestx[])
{
int ub=32767;
Flowshop X=new Flowshop();
X.x=new int[n+1];
X.f2=new int[n+1];
X.m=new int[2][6];
X.n=n;
X.bestx=new int[3];
X.bestf=ub;
X.f1=0;
X.f=0;
for(int i=0;i<=n;i++)
{X.f2[i]=0;
X.x[i]=i;}
X.Backtrack(1);
return X.bestf;
}
void Backtrack(int i)
{
if(i>n)
{
for(int j=1;j<=n;j++)
bestx[j]=x[j];
bestf=f;
}
else
for(int j=i;j<=n;j++)
{
f1+=m[x[j]][1];
f2[i]=((f2[i-1]>f1)?f2[i-1]:f1)+m[x[j]][2];
f+=f2[i];
if(f<bestf)
{
{int t=x[i];x[i]=x[j];x[j]=t;};
Backtrack(i+1);
{int t=x[i];x[i]=x[j];x[j]=t;};
}
f1-=m[x[j]][1];
f-=f2[i];
}
}
}
public class hw
{
public static void main(String[] args)
{
Flowshop a=new Flowshop();
//a.m[2][6]={{1,2},{1,1},{2,3},{2,1},{3,2},{3,3}};
a.Flow(a.m,3,a.bestx);
for(int i=0;i<a.n;i++)
a.Backtrack(i);
System.out.println(a.bestf);
}
}