#include<iostream>
using namespace std;
int S[3][7]; // 假设3台机器处理7个作业
void MultiMachine(int t[],int d[],int p[],int n,int m)
{
int rear[3]; // S[i]为存储机器i处理作业的队列,rear[i]为队尾下标
int i,j,k;
// 安排前m个作业
for(i=0;i<m;i++){
S[i][0] = i+1;
rear[i] = 0; // 每个作业队列均只有一个作业
d[i] = t[i]; // 每台机器的剩余时间
}
// 依次安排余下的每一个作业
for(i=m;i<n;i++){
// 查找最先空闲的机器
for(j=0,k=1;k<m;k++)
if(d[k]<d[j]) j = k;
rear[j]++; // 将作业i插入队列 S[j]
S[j][rear[j]] = i+1;
d[j] = d[j]+t[i];
}
// 输出每个机器处理的作业
for(i=0;i<m;i++){
cout<<"机器"<<i+1<<": ";
for(j=0;S[i][j]>0;j++)
cout<<p[S[i][j]-1]<<" ";
cout<<endl;
}
}
int main()
{
int t[] = {16,14,6,5,4,3,2};
int d[] = {0};
int p[] = {4,2,5,6,3,7,1}; // t[]对应的机器号
MultiMachine(t,d,p,7,3);
return 0;
}
【算法】多机调度问题(贪心法)
于 2020-05-18 17:41:04 首次发布