多机调度问题
来源:互联网 发布:淘宝卖家活动报名入口 编辑:程序博客网 时间:2024/05/21 09:46
#include <stdio.h>#include <stdlib.h>#define M 7#define N 3//对于工作的存储typedef struct Job{int id; int time;}job[M];//对于机器的存储typedef struct Mechine{int id;int avail;}Me[N];//对应于每台机器typedef struct node{int data; //每台机器中存放的工作编号struct node * next;}Lnode[N],lnode,*listnode;//排序void sort(job a,int n,Me b,int flag){int k,m;job temp;Me temp1;for(k=0;k<n-1;k++){for(m=k+1;m<n;m++){if(a[k].time<a[m].time &&flag==0) //对每份工作时间进行排序{temp[0]=a[k];a[k]=a[m];a[m]=temp[0];}if(b[k].avail<b[m].avail&&flag==1) //对机器时间进行排序{temp1[0]=b[k];b[k]=b[m];b[m]=temp1[0];}} }}//将工作编号插入到结构体中数据项,用来输出结果void listinsert(Lnode &l,int m,int n){ listnode s,p;//l[m].data=n;p=&l[m-1];s=(listnode)malloc(sizeof(listnode));//开辟节点用来存放新加入的数据 //printf(" %d ",p->data);while(p->next){ //printf(" %d ",p->data); p=p->next;}; //使之到最后一个节点//printf("\n");s->data=n;s->next=NULL;p->next=s;}//时间分配方法void f(job J ,Me K,Lnode &l){int i;for(i=0;i<M;i++){if(i<N) {K[i].avail+=J[i].time; //当工作份数小于机器数时,分别传递对应值l[i].data=J[i].id;l[i].next=NULL;}else{K[N-1].avail+=J[i].time; //否则将当前工作时间给最后一台机器listinsert(l,K[N-1].id,J[i].id);sort(J,N,K,1); //将机器时间按从大到小排序}}}void print(Lnode l){listnode p;int i;for(i=0;i<N;i++){p=&l[i];printf("第%d个机器要完成以下工作",i+1);printf("%d ",p->data);while(p->next){p=p->next;printf("%d ",p->data);}printf("\n");}}int main(){ int i;job k;Me x;//Lnode node=NULL;Lnode l;//关于工作的输入for(i=0;i<M;i++){k[i].id=i+1;printf("请输入第%d份工作时间:\n",i+1);scanf("%d",&k[i].time);}//关于机器输入for(i=0;i<N;i++){x[i].id=i+1;x[i].avail=0;}//关于每个机器分配分配工作初始化for(i=0;i<3;i++){l[i].data=0;l[i].next=NULL;}sort(k,M,x,0);//将输入工作时间从大到小进行排序f(k,x,l); //进行时间的分配//printf("\na\n"); print(l); //输出结果return 0;}