算法第5章上机实践
1.实践题目 :工作分配问题
2.问题描述
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。
3.算法描述
void slove(int i,int count){
if(i>n&&cal_value>count){ cal_value=count; return; } for(int j=1;j<=n;j++){
if(vis[j]==0&&cal_value>count){ vis[j]=1; slove(i+1,count+num[i][j]); vis[j]=0; } } }
开数组num[i][j]来存数据,将工作i分配给第j个人所需的费用为num[i][j] ,设数组vis[j]来记录第j个人是否工作,如果vis[j]=0,则变为1,然后向下遍历统计count值,回溯后变为0;每一个节点会分支为n个
每个节点都有1-n的分支,通过vis【j】数组来进行约束向下遍历。
4.心得体会
回溯法使用的是递归的思路,在数据范围偏大的时候会反复进行一些无用的行为导致超时,因此需要减枝操作,这两道题目都是比较好想出来解决方法的,不过01剪枝一开始出现了一些问题。然后一定要注意好在向下遍历的时候的细节。

浙公网安备 33010602011771号