贪心法多作业调度

View Code
#include<iostream>
using namespace std;
#define max 100
 
float d[max];//m台机器的空闲时间存储在d[m]中
int s[max][max];//把第j个作业放到第i太机器上去运行
 
typedef struct homework{//数据结构来存储作业信息 
    int ID;
    float time; 
}hw;

typedef struct m{//快结构体的因为是把在改机器的作业存起来
    int number;//记录存储在改机器的作业个数 
    int ma[max];
    float timesum;
}mc;

int compare(const void *b1,const void *b2){//比较函数 
    hw *aa=(hw *)b1;
    hw *bb=(hw *)b2;
    return (int)((bb->time)-(aa->time));//降序排序 
}


int schedules(hw *h,int n,int m,mc *machince){
    qsort(h,n,sizeof(hw),compare);//调用系统函数对结构数组排序 
    for(int i=0;i<m;i++){//初始化s[][],把前最大 
        machince[i].timesum=h[i].time;//初始化机器总时间 
        machince[i].number=1;//初始化,每台机器有一个作业 
        machince[i].ma[0]=h[i].ID;
    }
  
    for(int i=m;i<n;i++){
        int temp=1;
        float min=machince[0].timesum;
        for(int k=1;k<m;k++){//找出最先空闲的机器 
            if(min>machince[k].timesum){
                min=machince[k].timesum;
                temp=k;//记录最先空闲的机器 ,因为程序从0开始,所以,temp实际应加一 
            }
         } 
         machince[temp].timesum+=h[i].time;
         machince[temp].number++;//增加了一个作业在此机器上运行 
         machince[temp].ma[machince[temp].number-1]=h[i].ID;//把作业加入机器中 
    }
    return 0;
    
}

int main(){
    hw h[max];//用h[]数组存放作业 
    mc machince[max];
    int n,m;
    cout<<"请输入作业的个数n和机器台数m:"<<endl;
    cin>>n>>m;    
    for(int i=0;i<n;i++){
          cout<<""<<i+1<<" 个作业所需的时间为:";
          cin>>h[i].time;
             h[i].ID=i+1; 
        } 
    if(m>=n){
        schedules(h,n,m,machince);
        cout<<"做完所需的时间为:"<<h[0].time<<endl<<"把作业随机分到一台机器运行(每台机器一个作业)"<<endl;
        return 0; 
    }       
    else{    
        schedules(h,n,m,machince);
        for(int i=0;i<m;i++){
            cout<<""<<i+1<<" 个机器的作业为:";
            for(int k=0;k<machince[i].number;k++)
                cout<<machince[i].ma[k]<<" ";
            cout<<endl; 
        }
    } 
    return 0;
    
}
原文地址:https://www.cnblogs.com/aijianiula/p/2763735.html