问题描述:
设有n个独立的作业{1,2,,n},由m台相同的机器进行加工处理。
作业所需时间为,约定:任何作业可以在任何一台机器上加工处理,但未完工前不
允许中断处理,任一作业不能拆分成更小的子作业…要求给出一种作业调度方案,使
所给的n个作业在尽可能短的时间内由台机器加工处理完成。
要求:随机生成n个作业相关信息,并计算由m台机器处理的最短时间。
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define x 10
#define y 10
#define N 5
#define M 3
int d[x];
int S[x][y];
struct work{
int hour;
int number;
};
work t[x];
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 m=M,n=N,j;
printf("请输入作业需要处理的时间:");
srand((unsigned)time(NULL));
work t[x];
for(int i=0;i<N;i++)
{
t[i].number=i+1;
t[i].hour=rand()%50+1;
printf("%d号作业需要%d分钟\n",t[i].number,t[i].hour);
}
bubble_sort(t, n);
for(j=0;j<m;j++)
{
d[j]=t[j].hour;
}
MultiMachine(t, n, d, m);
}
void MultiMachine(work t[], int n, int d[], int m){
int rear[x];
int i, j, k,max;
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");
}
for(i=0;i<m;i++){
printf("%d",d[i]);
printf("\n");
max=d[0];
if(d[i]>max){
max=d[i];
}
}
printf("最短完工需要%d",max);
}