多机调度问题

来源:互联网 发布:淘宝卖家活动报名入口 编辑:程序博客网 时间: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;}