一.问题分析
1.问题描述:
有n个机器零件,每个零件必须先由机器A处理,再由机器B处理。零件Pi需要机器1,2处理时间为P[i].Atime,P[i].Btime
如何安排零件加工顺序,使第一个零件从机器1上加工开始到最后一个零件在机器2上加工完成,所需的总加工时间最短?
2.A机可以连续不间断开动,B机第i个零件的加工完成时间为:
B_end_time[ i ]=max(B_end_time[ i - 1 ] , A_end_time[ i ]) + P[ i ].Btime
取决于B机处理完前一个零件和A机处理完本零件的最晚时间
3.排列树的概念
回忆递归算法中数组全排列的内容:
a[N]的全排列 = for(0..N-1)将每个元素swap到a[0]一次 + a[N-1]的全排列
在解空间中,每递归深入一层,分支数-1 ,到叶结点时,解的数量=N*(N-1)*(N-2)*(N-3).......=N!
4.约束与限界函数
①约束函数禁止 "根本就不可能出现的情况" ,本题中每一种排列方式都可以出现,所以没有约束函数
②限界函数禁止 "会出现但没必要再扩展的情况". 当目前的B_end_time小于已知的最优解bestn2时,可以试着进行递归
因此,最优解bestn2初始值=INT_MAX