flowshop.java

来自「java实现批处理作业调度算法 开发环境为Eclipse」· Java 代码 · 共 66 行

JAVA
66
字号
public class FlowShop
{
	static int n;          //作业数
	static int f1;         //机器1完成处理时间
	static int f;          //完成时间和
	static int bestf;      //当前最优值
	static int[][]m;       //各作业所需的处理时间
	static int[]x;         //当前作业调度
	static int[]bestx;     //当前最优作业调度
	static int[]f2;        //机器2完成处理时间
	public static void main(String[] args)
	{
		n=3;
		bestf=19;
		m=new int[n+1][3];
		m[1][1]=5;
		m[1][2]=4;
		m[2][1]=3;
		m[2][2]=4;
		m[3][1]=2;
		m[3][2]=6;
		x=new int[n+1];
		for(int i=0;i<=n;i++)
			x[i]=i;
		bestx=new int[n+1];
		f2=new int[n+1];
		backtrack(1);
		System.out.println("批处理作业完成的最短时间和为:"+bestf);
		System.out.println("批处理最短时间的作业调度为:");
		for(int i=1;i<=n;i++)
			System.out.print(bestx[i]+" ");
		System.out.println();
	}
	////////////////////////////////////
	public static 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)
				{
					swap(x,i,j);
					backtrack(i+1);
					swap(x,i,j);
				}
				f1-=m[x[j]][1];
				f-=f2[i];
			}
	}
	////////////////////////////////
	public static void swap(int []x,int i,int j)
	{
		int temp=x[i];
		x[i]=x[j];
		x[j]=temp;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?