1.实践问题:
工作分配问题
2.问题描述:
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。
3.算法描述:
1)解空间:排列树
2)测试样例的解空间树:
3)剪枝方法:
void Backtrack(int t){ for(int k=1;k<=n;++k){ if(!b[k]){ b[k]=1; sum+=p[k][t]; if(t==n){ if(sum<best) best=sum; } else if (sum<best) Backtrack(t+1); sum-=p[k][t]; b[k]=0; } } }
4.心得体会:
和同伴想了好久才想出一个标记防止重复选择,回溯法的应用还不够熟练,怕剪枝方法遗漏导致算法运行时间过久。
原文地址:https://www.cnblogs.com/yelimin/p/10146072.html
时间: 2024-11-05 15:48:44