回溯法解决工作分配问题
回溯法解决工作分配问题
问题描述:
设有n件工作分配给n个人。为第i个人分配工作j所需的费用为c[i][j] 。试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最小。
代码块如下:
package suanfa;
import java.util.Scanner;
public class 工作分配问题回溯法 {
static int n,cost=0; //耗资cost为0 n为员工数量
static int c[][]=new int[100][100]; //各员工在各工作上的工资static void work(int i,int count , int x[]){if(i>n && count<cost){//各个工作安排完毕且为更优解cost = count;//更新最优解showResult(x);//展示方案return;}if(count<cost)for(int j=1;j<=n;j++)if(x[j] == 0){ //j表示员工,判断其是否被安排x[j] = i; //i表示工作count+=c[j][i];work(i+1,count,x); x[j] = 0; count-=c[j][i];}}static void showResult(int x[]) {int pay=0;for(int i=1;i<x.length;i++) {System.out.println(" 员 工 ("+i+") 工 作 :"+x[i]+" 工 资 为 :"+c[i][x[i]]);pay+=c[i][x[i]];}System.out.println(" 当 前 耗 资 为 :"+pay+"\n ------------------------------------");
}
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);System.out.print(" 请 输 入 员 工 数 量 :");//输入问题规模n=sc.nextInt();int x[]=new int[n+1];//用于记录工作安排System.out.println(" 输入各员工在各工作的工资");System.out.print(" 工 作 编 号 :");for(int i=1;i<=n;i++) System.out.print(i+" ");System.out.println();for(int i=1;i<=n;i++){System.out.print(" 员 工 编 号 ("+i+"):");for(int j=1;j<=n;j++){c[i][j]=sc.nextInt();//输入各个数据x[j] = 0; //初始化工作安排}cost+=c[i][i]; //初始耗资:按员工顺序安排工作}//展示初始安排信息System.out.println(" 初 始 工 作 安 排-----------------------");for(int i=1;i<x.length;i++)System.out.println(" 员 工 ("+i+") 工 作 :"+i+" 工 资 为 :"+c[i][i]);System.out.println(" 初 始 工 作 安 排 耗 资 :"+cost+"");//展示更优化安排方案System.out.println(" 更 优 工 作 安 排-----------------------");work(1,0,x);//i表示员工,从第1个员工安排工作System.out.println(" 预 计 最 少 耗 资 :"+cost);
}
}
本人小白一名,还请各位大佬多多指教!!!
回溯法解决工作分配问题相关推荐
- 回溯法解决工作分配问题及分析
1.实践题目 工作分配问题 2.问题描述 设有n件工作分配给n个人.将工作i分配给第j个人所需的费用为cij . 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小 ...
- 回溯法解决tsp问题 matlab,回溯法求解tsp问题
回溯法以这种工作方式递归地在解空间中搜索, 直至找到所 要求的解或解 空间中已无活结点时为止. 回溯法求解 TSP 问题,首先把所有的顶点的访问标志初始化为 0,...... 回溯法求解 TSP 问题 ...
- 回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)
问题:0/1背包问题 例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量.背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1 ...
- 利用回溯法解决1-9之间添加+或-或使得运算结果为100的问题
问题描述 编写一个在1,2,-,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性.例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 1 ...
- 回溯法解决0-1背包问题
回溯法解决0-1背包问题 参考文章: (1)回溯法解决0-1背包问题 (2)https://www.cnblogs.com/womendouyiyang/p/10957527.html (3)http ...
- 编程解决素数环问题Java_回溯法解决素数环问题java实现
素数环问题: 输入正整数n,把整数1,2,3--,n组成一个环,使得相邻两个整数之和均为素数,输出所有方案,注意同一个环应恰好输出一次.n<==16 样例输入: 6 样例输出: 1 4 3 2 ...
- 回溯法解决部落冲突问题
回溯法解决部落冲突问题 实验内容 问题描述 思路分析 方法步骤 实验代码 实验内容 原始部落byteland中的居民为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫 ...
- 回溯法解决n皇后问题
回溯法解决n皇后问题 题目要求: 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后, ...
- 回溯法解决力扣79题单词搜索
回溯法解决力扣79题单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母 ...
最新文章
- 数据分析之全国热门景点分析
- ManualResetEvent详解
- 【python爬虫】报错module requests has no attribute get
- [BZOJ]1055: [HAOI2008]玩具取名
- cyyz: Day 4 网络流整理
- Codeforces Round #226 (Div. 2)
- CodeForces 621C 数学概率期望计算
- java怎么定义scanner_Java Scanner类的常用方法及用法(很详细)
- PAT-1068 万绿丛中一点红
- Shifting Letters
- 知己知彼才能成功拿下职场offer!
- C++泛型编程——模板学习
- 最短路径 floyd最小环 洛谷2738 篱笆回路 网上题解
- 基于经典蓝牙的安卓蓝牙APP开发(基于蓝牙2.0开发,例:HC-05)
- ​IBM、Google、Oracle三巨头的公有云之殇(下)
- UE4大场景解决方案 ——Pak的打包与加载
- php bearer token,php-使用CURL设置Bearer令牌的正确方法
- 基于Nacos和Sentinel实现灰度路由和流量防护一体化
- jQuery 判断是否包含在数组中 jQuery.inArray()
- 下载和运行GitHub上的代码教程总结