工作分配问题
来源:互联网 发布:uuidgen windows 编辑:程序博客网 时间:2024/05/17 22:08
问题描述:
设有n件工作分配给n个人。为第i个人分配工作j所需的费用为c[i][j] 。试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最小。
算法思路:
对于工作分配问题,可以采用排列树的递归算法进行求解。要将n个工作分配给n个人,并要求费用最小,就需要依次计算出不同分配情况下的费用,到达叶节点之后再进行比较,即在遍历排列树的过程中是没有限界函数和约束函数的。
代码:
#include<bits/stdc++.h>using namespace std;int n,bestx=0,b=0;intc[1024][1024],x[1024],bx[1024];void backtrace(int t){ if(t>n){ if(b <bestx){ bestx=b;//如果所得时间比之前的都小的话,就进行更新 for(inti=1;i<=n;i++) bx[i]=x[i]; } }else{ for(int i=t;i<=n;i++){//这是排列树 ,需要有x数组进行交换 b += c[t][x[i]];//t表示的是深度,也就是工作序号,i表示分配给的人 swap(x[i],x[t]); backtrace(t+1); swap(x[i],x[t]); b -= c[t][x[i]];//回溯 } }}int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cin>>c[i][j]; bestx+=c[i][1]; } for(int i=1 ;i<=n;i++)//对x数组进行顺序初始化 x[i] = i; backtrace(1); cout<<bestx<<endl; for(int i=1;i<=n;i++) cout<<bx[i]<<" "; return 0;}
阅读全文
0 0
- 工作分配问题
- 工作分配问题
- 17085 工作分配问题
- 工作分配问题
- 工作分配问题
- 【9503】工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题 Java 回溯
- 【回溯法】工作分配问题
- 工作分配问题 assignment problem
- 工作分配问题 解题报告
- 匹配(工作分配问题)
- 工作分配问题pascal程序
- 应用分枝限界解决工作分配问题
- Scrapy爬取网易云音乐和评论(四、关于API)
- css选择器实例
- 转载:Qt5基本教程
- 极限挑战。感恩有你
- springboot 整合mybatis 基于注解开发 传入对象
- 工作分配问题
- VLD(Visual LeakDetector)内存泄露工具的使用
- Scrapy爬取网易云音乐和评论(五、评论)
- MFC仿播放器中的隐藏弹出toolbar
- ARDUINO多功能灾难现成搜救机器人
- 数据结构实验之图论八:欧拉回路
- python——当groupby遇到匿名函数
- 决胜未来的产品经理,需要掌握这4种关键能力
- forEach、for、$.each()跳出循环比较