多机调度问题-----随机输入

问题描述:
设有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);
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无极921

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值