📄 job.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 + -