最长处理时间的作业优先,当机器数量小于任务数量
将n个作业按照所需时间从大到小排序,然后依此顺序将作业分配给最先空闲的处理机
t[n] n个作业的处理时间
d[m]m台机器的空闲时间
S[m]集合数组 存储每台机器所处理的作业,
其中S[i]表示机器i所处理的作业
rear[i]为队列S[i]当前的队尾下标
1.代码
#include<windows.h>
#include <iostream>
using namespace std;
#include <string.h>
const int n = 7;
const int m = 3;
void MultiMachine(int t[ ], int n, int d[ ], int m);
int main( )
{
int t[n] = {16, 14, 6, 5, 4, 3, 2};
int d[m] = {0};
MultiMachine(t, n, d, m);
Sleep(80000);
return 0;
}
void MultiMachine(int t[ ], int n, int d[ ], int m)
{ //假设3台机器处理7个作业
int S[3][7], rear[3]; //S[i]为存储机器i处理作业的队列,rear[i]为队尾下标
int i, j, k;
for (i = 0; i < m; i++) //安排前m个作业
{
S[i][0] = i; 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]++; S[j][rear[j]] = i; //将作业i插入队列S[j]
d[j] = d[j] + t[i];
}
for (i = 0; i < m; i++) //输出每个机器处理的作业
{
cout<<"机器"<<i<<":";
for (j = 0; S[i][j] >= 0; j++)
cout<<"作业"<<S[i][j]<<" ";
cout<<endl;
}
}
2.结果示例