批处理作业调度

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=105;
const int inf=0x3f3f3f3f;
int n,bestf,f1,f2,f;//f1在第一台机器上加工的完成时间,f2在第二台机器上加工的完成时间,f完成时间和;
int x[maxn],bestx[maxn]; //x[i]表示第i个应该处理的作业;bestx最有调度顺序

struct node{
    int x,y;//机器零件在第一台机器上的加工时间x和第二台机器上的加工时间y
}T[maxn];

void backtrack(int t){
 
    if(t>n){
        for(int i=1;i<=n;i++) 
        {
            bestx[i]=x[i];//(1)记录最优调度顺序;
        }    
        bestf=f;   //(2)记录最优时间和;
        return ;
    }
    for(int i=t;i<=n;i++){//排列树
        f1+=T[x[i]].x;
        int temp=f2;
        f2=max(f1,f2)+T[x[i]].y;
        f+=f2;
        if(f<bastf)//(3)限界条件填充;
        {  
            Swap(x[t],x[i]); //(4)交换;
            backtrack(t+1);   //(5)继续深搜;
            Swap(x[t],x[i]);  //(6)还原现场,复位反操作;
        }
        f1-=T[x[i]].x;//还原现场
        f-=f2;
        f2=temp;
    }
}

void Intnit(int a[],int b[])
{
    for(int i=1;i<=n;i++)//初始化作业处理时间
        {
           T[i].x=a[i];
           T[i].y=b[i];
           x[i]=i;
         }
}

void print(){
    cout<<"最优机器零件加工顺序:";
    for(int i=1;i<=n;i++) //输出最优加工顺序
        cout<<bestx[i]<<" ";
    cout<<endl;
    cout<<"最优机器零件加工时间和:";
    cout<<bestf<<endl;
}

int main(){    
    n=3;
    int f1t[4]={0,2,3,2};
    int f2t[4]={0,1,1,3};  
    Intnit(f1t,f2t) ;//初始化作业处理时间
    bestf=inf; //初始化为无穷大 
    f1=f2=f=0;
    backtrack(1);         // 深搜排列树    
    print();    
    return 0 ;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值