1、实践题目 :工作分配问题

 

2、问题描述

设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。

设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同

的工作,并使总费用达到最小。

 

3、算法描述(包括解空间,画出测试样例的解空间树,剪枝(约

束函数或限界函数)方法描述)

解空间: int c[21][21]; cin>>c[i][j];

剪枝函数:if(flag[j]==0&&i<n+1&&w+c[i][j]<s)  // 分配(没有分配过

、不是叶子结点、选择后费用不超过最佳费用)

解空间树:

 

4、心得体会(对本次实践收获及疑惑进行总结)

这次实践让我充分了解到了回溯法的使用方法和困难之处。穷举法+剪枝函数,而我认为难点就正是找出剪枝函数。

在实践第一题中我就迟迟不能知道怎么剪枝(我自认为已经把没必要的分支减掉了),然后在看了书上的相关知识

后我才知道还要对物品进行单位价值的排序然后再用右支树的上界函数来评估是否有必要继续选择右支。最后,我

以为这一章的难点还应该要多做一些题才能解决(我觉得一些剪枝函数完全想不到)。