您的位置:首页 > 其它

装配线调度问题

2014-08-05 13:49 344 查看
参考:http://www.cnblogs.com/submarine/archive/2011/06/11/2078636.html

装配一辆汽车,有两条装配线分别有n个装配点,每条装配线在进出所花时间为e[i],x[i] (i=0,1),每个装配点所需时间a[i][j](i=0,1;j=1,2,...,n),从一条装配线i的第j个装配点到另一条装配线的第j+1个装配点所需时间t[i][j](i=0,1;j=1,2,...,n-1).

# define MAX n;
int way[3][MAX + 1];

void FindWay(int e[3], int a[3][MAX + 1], int t[3][MAX + 1], int x[3], int sum[3][MAX + 1])
{
int i, j, k;
sum[1][1] = e[1] + a[1][1];
sum[2][1] = e[2] + a[2][1];
for (i = 2; i <= MAX; i++)
{
//line 1
if (sum[1][i - 1] + a[1][i] > sum[2][i - 1] + t[2][i - 1] + a[1][i])
{
sum[1][i] = sum[2][i - 1] + t[2][i - 1] + a[1][i];
way[1][i] = 2;//way[1][i]记录station[1][i]的前一个station所属的line
}
else
{
sum[1][i] = sum[1][i - 1] + a[1][i];
way[1][i] = 1;
}

//line 2
if (sum[2][i - 1] + a[2][i] > sum[1][i - 1] + t[1][i - 1] + a[2][i])
{
sum[2][i] = sum[1][i - 1] + t[1][i - 1] + a[2][i];
way[2][i] = 1;
}
else
{
sum[2][i] = sum[2][i - 1] + a[2][i];
way[2][i] = 2;
}
}
if (sum[1][MAX] + x[1] > sum[2][MAX] + x[2])
{
cout << "mintime:" << sum[2][MAX] + x[2] << endl;
PrintWay(2);
}
else
{
cout << "mintime:" << sum[1][MAX] + x[1] << endl;
PrintWay(1);
}
}

void PrintWay(int exitline)//反序输出
{
int i;
cout << "line:" << exitline << "-->" << "station:" << MAX << endl;
for (i = MAX; i >=2 ; i--)
{
cout << "line:" << way[exitline][i] << "-->" << "station:" << i - 1 << endl;
exitline = way[exitline][i];
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: