某汽车工厂有2个装配线,每个装配线有n 个装配站(按顺序编号1~n ),两个装配线对应的装配站执行相同的功能,但所用的时间可能不同。经过第i条流水线(i=1,2)的第j 个装配站所花的时间为Aij。从第i条流水线的第j 个装配站移到第j+1个装配站的时间可以忽略,而移到另外一个流水线的下一个装配站则需要一定的时间Tij。
汽车进入流水线不需要花时间,出流水线时需要花时间Tin。
汽车的装配需要按顺序经过所有装配站。
现在已知装配时间Aij 和转移时间Tij,要求输出装配一辆汽车所需要的最短时间。
// 装配线调度问题.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #define n 6 using namespace std; int e1=2,e2=4; int x1=3,x2=2; int f[2][6];]//装配站的时间 int l[2][6];//装配线 int a[2][6]={{7,9,3,4,8,4},{8,5,6,4,5,7}}; int t[2][5]={{2,3,1,3,4},{2,1,2,2,1}}; int last;//最后出口 int result;//总结果 void fast_way(int a[][6],int t[][5]) { f[0][0]=e1+a[0][0]; f[1][0]=e2+a[1][0]; for(int j=1;j<n;j++) { if((f[0][j-1]+a[0][j])<=(f[1][j-1]+t[1][j-1]+a[0][j])) { f[0][j]=f[0][j-1]+a[0][j]; l[0][j]=0; } else { f[0][j]=f[1][j-1]+t[1][j-1]+a[0][j]; l[0][j]=1; } if((f[1][j-1]+a[1][j])<=(f[0][j-1]+t[0][j-1]+a[1][j])) { f[1][j]=f[1][j-1]+a[1][j]; l[1][j]=1; } else { f[1][j]=f[0][j-1]+t[0][j-1]+a[1][j]; l[1][j]=0; } if((f[0][5]+x1)<=(f[1][5]+x2)) { result=f[0][5]+x1; last=0; } else { result=f[1][5]+x2; last=1; } } } void print_line(int l[][6],int last) { int i=last; int j; cout<<"line "<<(i+1)<<",station"<<n<<endl; for(j=5;j>=1;j--) { i=l[i][j]; cout<<"line "<<(i+1)<<",station"<<j<<endl; } } int _tmain(int argc, _TCHAR* argv[]) { fast_way(a,t); print_line(l,last); cout<<"所需要的时间为"<<result<<endl; return 0; }