1、实践题目
工作分配问题
2、问题描述
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。
输入格式:输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。
输出格式:将计算出的最小总费用输出到屏幕。
输入样例:3
10 2 3
2 3 4
3 4 5
输出样例:9
3、算法描述(包括解空间,画出测试样例的解空间树,剪枝(约束函数或限界函数)方法描述)
(1)解空间
解空间为{x1,x2,x3,······,xn},其中xi=1,2,3,4···,n,表示第i个人安排的工作号。
(2)解空间树:以测试样例为例,解空间树如下:
(3)剪枝方法
1、每个工作是否已被分配,如已被分配,则不再分配给下一个人。
2、如果判断当前费用c已经大于之前算
(4)代码实现
1 #include
2 using namespacestd;3 int n;//工作数量
4 int a[21][21];//工作费用
5 int flag[21];//标记是否已经分配过
6 int bestc = 0;//最少费用
7
8 void backtrack(int i,intc){9