⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 job.cpp

📁 有m台不同的机器
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>

#define MAX 50

struct Node{
	int machine;
	int time;
	int start;
	int finish;
	int end;
}point[MAX][MAX];

struct Job{
	int x;
	int y;
}jobs;

struct Machine{
	Job ready[MAX];
	int busy;
	int readynum;
	int free;
}Mach[5];

int IsFinish(int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(point[i][4].finish==1)
			return 1;
	}
	return 0;
}

void Insert(int machine,int x,int y)
{
	int i,a,b,readynum;
	readynum=Mach[machine].readynum;
	for(i=readynum-1;i>0;i--)
	{
		a=Mach[machine].ready[i].x;
		b=Mach[machine].ready[i].y;
		if(point[a][b].time<point[x][y].time) break;
		else
		{
            Mach[machine].ready[i+1].x=Mach[machine].ready[i].x;
            Mach[machine].ready[i+1].y=Mach[machine].ready[i].y;
    	}
	}
	Mach[machine].ready[i+1].x=x;
    Mach[machine].ready[i+1].y=y;
    Mach[machine].readynum++;
}

void Work(int machine,int T)
{
	int x,y,i;
	if(T>Mach[machine].free||T==0)
	{
		if(Mach[machine].readynum>=1)
		{
			x=Mach[machine].ready[0].x;
            y=Mach[machine].ready[0].y;
            Mach[machine].free+=point[x][y].time;   
            point[x][y].start=T;
		}
	}
	else if(T==Mach[machine].free)
	{      
        x=Mach[machine].ready[0].x;
        y=Mach[machine].ready[0].y;
        point[x][y].start=0;
        point[x][y].end=T;
        point[x][y].finish=1;          
        for(i=0;i<Mach[machine].readynum-1;i++)
		{    
            Mach[machine].ready[i].x=Mach[machine].ready[i+1].x;
            Mach[machine].ready[i].y=Mach[machine].ready[i+1].y;
    	}
        Mach[machine].readynum--;               
        if(y<4)
		{                    
            point[x][y+1].start=1;
            Insert(point[x][y+1].machine,x,y+1);
    	}
    }
	return;
}


void main()
{
	FILE *fp;
	char filename[10];
	int i,j,num,n,T,overtime;
	while(1)
	{
		printf("please input the filename:");
		scanf("%s",filename);
		printf("\n");
		if((fp=fopen(filename,"r"))==NULL)
		{
			printf("cann't open file\n");
//			getch();
			exit(0);
		}
		i=0;j=0;
		while(fscanf(fp,"%d",&num)!=EOF)
		{
			if(j%2==0) point[i][j/2].machine=num;
			else  point[i][j].time=num;
			if(j==9)
			{
				i++;
				j=0;
			}
			else j++;
		}
		n=i;
		printf("There are 5 machines and %d jobs!!!\n",n);

		for(i=0;i<n;i++)
		{
			point[i][0].start=1;
			Insert(point[i][0].machine,i,0);
		}

		for(T=0;T<10000;T++)
		{
			if(T%101==0)
			{
				if(IsFinish(n)) break;
			}
			for(i=0;i<5;i++)
			{
				Work(i,T);
			}
		}
		
		overtime=0;
		for(i=0;i<n;i++)
		{
			if(point[i][4].end>overtime) 
				overtime=point[i][4].end;
		}
		printf("工件加工完成时间是%d!\n",overtime);

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -