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