Р {3,4,5,6},Р {2,4,6,3},Р {6,5,8,9},Р {9,6,8,7}};Р int c[][] = new int[][]{Р {5,4,3,2},Р {6,3,3,2},Р {9,8,5,4},Р {5,6,4,5}};Р Р Test3 obj;;Р Р for(int j=12;j<=26;j++){Р obj = new Test3(w, c, j);Р obj.backtracking(0);Р System.out.println("最小重量: " + obj.bestw);Р System.out.print("总价格: " +obj.bestc+"\n最优方案: ");Р for (int i = 0; i < obj.partNum; ++i) {Р System.out.print(obj.bestx[i] + " ");Р }Р System.out.println();Р }Р?}Р}Р实验结果:Р Р三、问题与讨论Р?考虑影响回溯法效率的因素有哪些?Р?影响回溯法效率的主要因素Р1)产生x[k]的时间Р2)满足显约束的x[k]值的个数Р3)计算约束函数constrain的时间(本例约束函数直接给出,不用计算)Р4)计算上界函数bound的时间(本例为restMinW 函数)Р5)满足约束函数和上界函数约束的所有x[k]的个数Р四、总结Р (对本次实验有什么心得体会?或建议Р 本次实验虽为回溯法,但却有动态规划的思想。回溯法也有子问题,可以用递归实现。回溯法与动态规划的不同在于回溯法拥有剪枝函数,可以缩短很大的计算量,而动态规划则需全部遍历。Р 回溯法虽然涉及到了数据结构树的知识,但只是帮助理解,在实现算法的过程中无需利用树来储存,只需借助一些全局变量来存储数据,通过递归便可实现。Р 回溯法效率很高,实现又比较简单,很实用。