c语言贪心算法作业调度问题,实验三 贪心算法 多机调度问题

基本题一:多机调度问题

一、实验目的与要求

1、熟悉多机调度问题的算法;

2、初步掌握贪心算法;

二、实验题

要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。

三、实验提示

1、把作业按加工所用的时间从大到小排序

2、如果作业数目比机器的数目少或相等,则直接把作业分配下去

3、如果作业数目比机器的数目多,则每台机器上先分配一个作业,如下的作业分配时,是选那个表头上s最小的链表加入新作业。

typedef struct Job

{

int ID;//作业号

int time;//作业所花费的时间

}Job;

typedef struct JobNode //作业链表的节点

{

int ID;

int time;

JobNode *next;

}JobNode,*pJobNode;

typedef struct Header  //链表的表头

{

int s;

pJobNode next;

}Header,pHeader;

int SelectMin(Header* M,int m)

{

int k=0;

for(int i=1;i

{

if(M[i].s

}

return k;

}

四、源代码

#include

#include

#include

using namespace std;

#define N 7

#define M 3

typedef struct job

{

int ID;

int time;

}     Job;

typedef struct machine

{

int ID;

int avail;

}     Machine;

Job a[N]={{1,2},{2,14},{3,4},{4,16},{5,6},{6,5},{7,3}};       //原始作业数据,from:教材

vector          m_vec_job;

vector   m_vec_machine;

bool UDgreater(Job elem1,Job elem2)

{

return elem1.time>elem2.time;

}

bool UDless(Machine elem1,Machine elem2)

{

return elem1.avail

}

int main()

{

if(M>N)

cout<

for (int i=0;i

{

m_vec_job.push_back(a[i]);

}

sort(m_vec_job.begin(),m_vec_job.end(),UDgreater); //作业按时间长度排序完毕

//     cout<

for (i=0;i

{

Machine tmp={i+1,0};   //机器的编号是从1开始的

m_vec_machine.push_back(tmp);

}

for(i=0;i

{

vector::iterator it;

it = min_element(m_vec_machine.begin(),m_vec_machine.end(),UDless);

cout<

(*it).avail+=m_vec_job[i].time;

}

return 0;

}

结果:

d3ea9ebcb3a69385af477c65a4553f96.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值