本文最后更新于192 天前,其中的信息可能已经过时,如有错误请发送邮件到1729915388@qq.com
设有n个独立的作业{1, 2, …, n},由m台相同的机器{M1, M2, …, Mm}进行加工处理,作业i所需的处理时间为ti(1≤i≤n),每个作业均可在任何一台机器上加工处理,但不可间断、拆分。多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。
设7个独立作业{1, 2, 3, 4, 5, 6, 7}由3台机器{M1, M2, M3}加工处理,各作业所需的处理时间分别为{2, 14, 4, 16, 6, 5, 3}。
————————————————
版权声明:本文为CSDN博主「关关雎鸠儿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42260102/article/details/95971105
#include<stdio.h>
//定义最大作业数量
#define MAXLENGTH 10
//定义机器的空闲时间
int d[MAXLENGTH];
//定义每台机器的处理时间
int S[MAXLENGTH][MAXLENGTH];
//定义一个结构体,记录作业处理时间
typedef struct work{
//作业时间
int hour;
//原顺序
int number;
} work;
work t[MAXLENGTH];
//数组的排序算法
void bubble_sort(work a[], int n){
int i, j;
work temp;
for (j = 0; j < n - 1; j++){
for ( i = 0; i < n-1-j; i++)
{
if (a[i].hour<a[i+1].hour)
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
}
//多机调度算法声明
void MultiMachine(work t[], int n, int d[], int m);
int main(){
//作业个数
int n;
//机器个数
int m;
//用于计数
int i;
printf("请输入待处理的作业个数:");
scanf("%d", &n);
printf("请输入作业需要处理的时间:");
for ( i = 0; i <n; i++)
{
scanf("%d", &t[i].hour);
t[i].number = i + 1;
}
//将结构体数组进行从大到小的排序,序号存在number中
bubble_sort(t, n);
printf("请输入机器的个数:");
scanf("%d", &m);
//将数组d初始化为0
for ( i = 0; i < m; i++)
{
d[i] = 0;
}
MultiMachine(t, n, d, m);
getchar();
getchar();
getchar();
}
void MultiMachine(work t[], int n, int d[], int m){
//队尾下标
int rear[MAXLENGTH];
int i, j, k;
//安排前m个作业
for ( i = 0; i < m; i++)
{
S[i][0] = t[i].number;
rear[i] = 0;
d[i] = t[i].hour;
}
//一次安排余下几个作业
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]] = t[i].number;
d[j] += t[i].hour;
}
//输出结果
for ( i = 0; i < m; i++)
{
printf("机器%d处理:", i + 1);
for ( j = 0; S[i][j]>0; j++)
{
printf("作业%d\t", S[i][j]);
}
printf("处理时间:%d\n",d[i]);
printf("\n");
}
}