设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。
试设计一个算法,给出总价格不超过d的最小重量机器设计。
输入格式:
第一行有3 个正整数n ,m和d, 0<n<30, 0<m<30, 接下来的2n 行,每行m个数。前n行是c,后n行是w。
输出格式:
输出计算出的最小重量,以及每个部件的供应商
输入样例:
输出样例:
在这里给出相应的输出。例如:
4
1 3 1
1.
1.1说明“最小重量机器设计问题"的解空间
以n=3,m=3为例,该问题的解空间如下:
(1,1,1)(1,1,2)(1,1,3)(1,2,1)(1,2,2)(1,2,3)(1,3,1)(1,3,2)(1,3,3)
(2,1,1)(2,1,2)(2,1,3)(2,2,1)(2,2,2)(2,2,3)(2,3,1)(2,3,2)(2,3,3)
(3,1,1)(3,1,2)(3,1,3)(3,2,1)(3,2,2)(3,2,3)(3,3,1)(3,3,2)(3,3,3)
1.2 说明 “最小重量机器设计问题"的解空间树
.
1.3 在遍历解空间树的过程中,每个结点的状态值
1)当前已选部件的价值cv。
2)当前已选部件占有的重量cw。
2. 对回溯算法的理解
在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。
若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。
而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。