最佳调度回溯法。C语言实现

void printP(int len){
    //打印调度方案。只是其中一种方案
    for(int i=0;i<len;i++){
       printf(“任务:%d”,kk[i][0]+1);
       printf(“分配给:%d\n”,kk[i][1]+1);
    }
    printf(“最佳调度方案时间为:%d\n”,bestT);
}
void copy(int k[][3],int len){
    for(int i=0;i<len;i++){
        kk[i][0] = k[i][0];
        kk[i][1] = k[i][1];
    }
}
void search(int i,int* ti,int n,int k[][3],int kl){
    if(i>=n){
       //说明所有任务全部分配完毕
        if(bestT==-1){
            bestT = maxTime(k,n,kl);
            copy(k,n);
        }else if(bestT>maxTime(k,n,kl)){
            bestT = maxTime(k,n,kl);
            copy(k,n);
        }
    }
    for(int j=0;j<kl;j++){
       //需要进行减枝操作
        if(bestT!=-1){
            if(maxTime(k,i,kl)<bestT){
               k[i][0] = i;//任务
               k[i][1] = j;//分配给j
               k[i][2] = ti[i];//时间
               search(i+1,ti,n,k,kl);
            }
        }else{
               k[i][0] = i;//任务
               k[i][1] = j;//分配给j
               k[i][2] = ti[i];//时间
               search(i+1,ti,n,k,kl);
        }
    }
}

    原文作者:回溯法
    原文地址: https://blog.csdn.net/liuxiongfeng22/article/details/85160900
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞