/*
* 批处理作业调度--采用回溯法解决--回溯法中的排列集
* Time:2012-12-30
* 下标从1开始
*/
package com.book.java;
public class Project37_FlowShop {
// public static int time[][]={{0,0,0},{0,2,1},{0,3,1},{0,2,3}};
public static int time[][]={{0,0,0},{0,30,80},{0,120,100},{0,50,90},
{0,20,60},{0,90,30},{0,110,10}};
//用来表示每一个任务分别在机器1和2上完成需要的时间,下标从1开始,time[1][2]表示
第一个任务在机器2上完成需要的时间
public static Job job[]=null;//将任务时间分别存储在各个任务中
public static int n;//用来表示有多少个任务
public static int bestt;//用来表示最佳时间
public static int currentt;//用来表示当前所需要的时间
// public static int delayt;//用来表示在完成相应任务的时候,所延迟的时间
public static int f[];//记录各个job的延迟时
public static int bestx[];//用来存放最佳的调度的方式
public static void main(String[] args) {
n=time.length-1;//初始化个数
f=new int[n+1];//初始化各个job的延迟
bestx=new int[n+1];//初始化最佳的调度方式的数组
job=new Job[n+1];//初始化各个任务
for(int i=1;i<=n;i++)
{
job[i]=new Job(i,time[i][1],time[i][2]);
}
bestt=Integer.MAX_VALUE;//初始化最佳时间
currentt=0;//出事化当前时间
flowshop(1);//回溯法解决
//输出结果
System.out.println("最佳的时间为:"+bestt);
System.out.println("任务调度的方式:");
for(int i=1;i<=n;i++)
{
System.out.print(bestx[i]+" ");
}
}
public static void flowshop(int i)
{
if(i>n)//当超过任务的个数的时候,计算最佳的使用时间,并记录最佳的调度方案
{
int temp=currentt+f[3];
if(temp<bestt)