您的位置:首页 > 其它

多机调度问题

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 多机调度