这学期就要结束了,将我的程序上传来供大家学习参考吧!加油啦!批处理作业调度java实现

import java.util.*;
public class Flowshop{
       
static int n,                   //作业数
                      f1
,                       //机器1完成处理时间
                      f
,                        //当前完成时间和
                      bestf
;            //当前最优值
       
static int[][] m;               //各作业所需要的时间
       
static int[] x;                 //当前作业调度
       
static int[] bestx;             //当前最优作业调度,保存结果调度顺序
       
static int[] f2;         //机器2完成处理时间
       
               
public  static void swap(int[] x,int i,int j){
               
int temp;
                temp
=x[j];
                x
[j]=x[i];
                x
[i]=temp;
       
       
}
 
private static void backtrack(int i){//i用来指到达的层数
       
if(i>n) {
               
for(int j=1;j<=n;j++){//j用来指示选择了哪个任务
                        bestx
[j]=x[j];
                       
System.out.print("当前作业调度为:");
                       
System.out.print(x[j]+"  ");
               
}
                       
System.out.println();
                        bestf
=f;
                       
System.out.println("每条深度优先结果为:"+bestf);
               
       
}
       
       
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);//把选择的任务j调到当前执行的为之i
                                backtrack
(i+1);
                                swap
(x,i,j);
                       
}
                        f1
-=m[x[j]][1];//状态恢复
                        f
-=f2[i];
               
}
 
}
 

 
   
public static void main(String[] args){
             
Scanner scanner=new Scanner(System.in);
           
           
System.out.println("请输入作业数目:");
            n
=scanner.nextInt();//注意这里的n是已经定义了的,不要再在这里定义,否则传参
                                 
//传不进去,输出只是0,0,0
             
               
             m
=new int[n+1][3];
             bestx
=new int[n+1];
             f2
=new int[n+1];
             x
=new int[n+1];
             bestf
=Integer.MAX_VALUE;
             
               
for(int i=1;i<=n;i++)
                x
[i]=i;
           
System.out.println("请输入作业在机器1,2上的运行时间:");
               
for(int i=1;i<=n;i++)
                         
for(int j=1;j<=2;j++)
                                        m
[i][j]=scanner.nextInt();
                 
       
   
        backtrack
(1);
       
System.out.println("当前最优值: "+bestf);
       
System.out.print("当前最优作业调度为: ");
       
for(int i=1;i<=n;i++)
               
System.out.print(bestx[i]+" ");
       
   
}

 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值