有没有人跟我一样用链表硬刚的?
查看原帖
有没有人跟我一样用链表硬刚的?
664910
Mmdyt楼主2022/2/15 00:02

如题

#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;
}


懒得打注释了,就这样吧

2022/2/15 00:02
加载中...