多机调度问题
2013-04-27 14:22
239 查看
#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 ; //对应于每台机器 typedef struct node { int data; //每台机器中存放的工作编号 struct node * next; }Lnode ,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; }