#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;
}