多机调度问题

#include "stdio.h"
#include "stdlib.h"
#include "queue"
#define MAX 10
using namespace std;

typedef struct Job
{
    int id;  
    int time;  //执行时间

}Job;

typedef struct Machine
{
    int id;
    int avail;  //机器在此时间之后空闲

    bool operator < (const Machine &m) const
    {
        return avail > m.avail;
    };

}Machine;

priority_queue<Machine> mpq;

int cmp(const void *j1, const void *j2) //将作业按执行时间降序
{
    return (*(Job *)j1).time < (*(Job *)j2).time;
}

//将作业按执行时间降序后,如果作业个数不大于机器个数,每天作业分配一台机器
//如果作业大于机器个数,则挑选出当前最先空闲出来的机器,先分配执行时间较长的作业
void greedy(Job job[], int n, Machine machine[], int m)
{
    qsort(job, n, sizeof(Job), cmp); //将作业按执行时间降序
    if(n<=m)
        printf("为每一个作业分配一台机器\n");
    else
    {
        int i;
        for(i=0; i<m; i++)
            mpq.push(machine[i]); //

        for(i=0; i<n; i++)
        {
            Machine m = mpq.top();
            mpq.pop();
            int start = m.avail;
            m.avail += job[i].time;
            printf("将机器%d从%d到%d的时间分配给作业%d\n", m.id, start, m.avail, job[i].id);
            m.id = m.id;
            mpq.push(m);
        }
    }

}

//初始化
void init(Job jobe[], int jobTime[], int n, Machine machine[], int m)
{
    int i;
    for(i=0; i<n; i++)
    {
        jobe[i].id = i+1;
        jobe[i].time = jobTime[i];
    }
    for(i=0; i<m; i++)
    {
        machine[i].id = i+1;
        machine[i].avail = 0;
    }
}

int main(){
    int n = 7;
    int jobTime[]  = {2, 14, 4, 16, 6, 5, 3};
    int m = 3;
    int i;
    Job jobe[7];
    Machine machine[3];
    init(jobe, jobTime, n, machine, m);
    printf("作业情况:\n");
    for(i=0; i<n; i++)
        printf("作业%d执行时间为%d\n", jobe[i].id, jobe[i].time);
    printf("共有%d台机器\n", m);

    greedy(jobe, n, machine, m);

    return 0;
}

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值