如题
#include<stdio.h>
#include<stdlib.h>
typedef struct danwei
{
int a,b;
struct danwei *p1,*p2;//规定 p1是机器方向,p2是工件方向
}DW;
int bg11[21][21],bg22[21][21];
void chuli (DW *gongjian[],DW *jiqi[],int k) //对一个工件的一次处理进行安排
{
extern int bg11[21][21],bg22[21][21];
int l,time;
if(gongjian[k]!=NULL)
{
DW *tmpp;
int tmp=0;
tmpp=gongjian[k];
while(1)
{
tmp++;
if(tmpp->p2!=NULL)
{
tmpp=tmpp->p2;
continue;
}
else
{
break;
}
}
l=bg11[k][tmp+1];
time=bg22[k][tmp+1];
DW *p;
p=(DW *)malloc(sizeof(DW));
tmpp->p2=p;
int qi;
qi=tmpp->b;
if(jiqi[l]!=NULL)
{
DW *pp;
pp=jiqi[l];
if(pp->a-qi>=time)
{
p->p1=pp;
jiqi[l]=p;
p->a=qi;
p->b=time+qi;
p->p2=NULL;
return;
}
else while(1)
{
if(pp->p1!=NULL)
{
if(qi>=pp->b&&pp->p1->a>=qi+time)
{
p->p1=pp->p1;
pp->p1=p;
p->a=qi;
p->b=p->a+time;
p->p2=NULL;
return;
}
else if(qi<pp->b&&pp->p1->a>=pp->b+time)
{
p->p1=pp->p1;
pp->p1=p;
p->a=pp->b;
p->b=p->a+time;
p->p2=NULL;
return;
}
else
{
pp=pp->p1;
continue;
}
}
else
{
if(pp->b>=qi)
{pp->p1=p;
p->a=pp->b;
p->b=p->a+time;
p->p1=NULL;
p->p2=NULL;
return;}
else
{pp->p1=p;
p->a=qi;
p->b=qi+time;
p->p1=NULL;
p->p2=NULL;
return;}
}
}
}
else
{
jiqi[l]=p;
p->a=qi;
p->b=time+qi;
p->p1=NULL;
p->p2=NULL;
return;
}
}
else
{
l=bg11[k][1];
time=bg22[k][1];
DW *p;
p=(DW *)malloc(sizeof(DW));
gongjian[k]=p;
if(jiqi[l]!=NULL)
{
DW *pp;
pp=jiqi[l];
if(pp->a>=time)
{
p->p1=pp;
jiqi[l]=p;
p->a=0;
p->b=time;
p->p2=NULL;
return;
}
else while(1)
{
if(pp->p1!=NULL)
{
if(pp->p1->a-pp->b>=time)
{
p->p1=pp->p1;
pp->p1=p;
p->a=pp->b;
p->b=p->a+time;
p->p2=NULL;
return;
}
else
{
pp=pp->p1;
continue;
}
}
else
{
pp->p1=p;
p->a=pp->b;
p->b=p->a+time;
p->p1=NULL;
p->p2=NULL;
return;
}
}
}
else
{
jiqi[l]=p;
p->a=0;
p->b=time;
p->p1=NULL;
p->p2=NULL;
return;
}
}
}
int main ()
{
int m,n,i,j,tmp;
scanf("%d%d",&m,&n);
int sx[m*n];
extern int bg11[21][21],bg22[21][21];
for(i=0,tmp=m*n;i<tmp;i++)
{
scanf("%d",&sx[i]);
}
for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&bg11[i][j]);
for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&bg22[i][j]);
DW *gongjian[n+1],*jiqi[m+1];
for(i=0;i<=n;i++)gongjian[i]=NULL;
for(i=0;i<=m;i++)jiqi[i]=NULL;
for(i=0,tmp=m*n;i<tmp;i++)
{
chuli(gongjian,jiqi,sx[i]);
}
int res=0;
DW *tmpp;
for(i=1;i<=n;i++)
{
tmpp=gongjian[i];
if(tmpp!=NULL)
{
while(tmpp->p2!=NULL)
{
tmpp=tmpp->p2;
}
if(res<tmpp->b)res=tmpp->b;
}
}
/*for(i=1;i<=m;i++) //这一大坨东西是调试用的,可以输出机器、工件的足迹(姑且这么叫吧)
{
tmpp=jiqi[i];
printf("\n\n%d\n",i);
j=0;
while(tmpp->p1!=NULL)
{
printf(" %d %d",tmpp->a,tmpp->b);
tmpp=tmpp->p1;
}
printf(" %d %d",tmpp->a,tmpp->b);
if(res<tmpp->b)res=tmpp->b;
}
printf("\n\n");
for(i=1;i<=n;i++)
{
tmpp=gongjian[i];
printf("\n\n%d\n",i);
j=0;
while(tmpp->p2!=NULL)
{
printf(" %d %d",tmpp->a,tmpp->b);
tmpp=tmpp->p2;
}
printf(" %d %d",tmpp->a,tmpp->b);
if(res<tmpp->b)res=tmpp->b;
}
printf("\n\n\n");*/
printf("%d",res);
return 0;
}
懒得打注释了,就这样吧