工作分配问题 Java 回溯
2013-12-12 19:36
369 查看
问题描述:
设有n件工作分配给n个人。为第i个人分配工作j所需的费用为c[i][j] 。试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最小。
3
10 2 3
2 3 4
3 4 5
import java.util.Scanner;
public class GongZuoFenPei {
static int n;
static int[][] p;
static int[][] t; //标记数组
static int minP;
static int tempMinP=0;
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
n=input.nextInt();
p=new int
;
t=new int
;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
p[i][j]=input.nextInt();
minP+=p[i][j];
}
}
getMinP(0);
System.out.println(minP);
input.close();
}
public static void getMinP(int k){
if(k==n){
if(tempMinP<minP){
minP=tempMinP;
}
return;
}
for (int i = 0; i < n; i++) {
if(isok(k, i)){
tempMinP+=p[k][i];
t[k][i]=1;
getMinP(k+1);
tempMinP-=p[k][i];
t[k][i]=0;
}
}
}
public static boolean isok(int k,int i){
for (int j = 0; j < n; j++) {
if(t[k][j]==1){
return false;
}
}
for (int j = 0; j < n; j++) {
if(t[j][i]==1){
return false;
}
}
return true;
}
}
另一种思路可以求n的全排列,遍历,求出最优解
设有n件工作分配给n个人。为第i个人分配工作j所需的费用为c[i][j] 。试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最小。
3
10 2 3
2 3 4
3 4 5
import java.util.Scanner;
public class GongZuoFenPei {
static int n;
static int[][] p;
static int[][] t; //标记数组
static int minP;
static int tempMinP=0;
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
n=input.nextInt();
p=new int
;
t=new int
;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
p[i][j]=input.nextInt();
minP+=p[i][j];
}
}
getMinP(0);
System.out.println(minP);
input.close();
}
public static void getMinP(int k){
if(k==n){
if(tempMinP<minP){
minP=tempMinP;
}
return;
}
for (int i = 0; i < n; i++) {
if(isok(k, i)){
tempMinP+=p[k][i];
t[k][i]=1;
getMinP(k+1);
tempMinP-=p[k][i];
t[k][i]=0;
}
}
}
public static boolean isok(int k,int i){
for (int j = 0; j < n; j++) {
if(t[k][j]==1){
return false;
}
}
for (int j = 0; j < n; j++) {
if(t[j][i]==1){
return false;
}
}
return true;
}
}
另一种思路可以求n的全排列,遍历,求出最优解
相关文章推荐
- 〖編程·C++〗回溯算法:排列树 - 工作分配问题
- 回溯法之工作分配问题
- 回溯法3--工作分配问题
- 回溯法之工作分配问题
- n皇后问题回溯法---java图形界面实现回溯过程
- 工作分配问题
- Java基于循环递归回溯实现八皇后问题算法示例
- 回溯法求解N皇后问题(Java实现)
- 从java内存分配角度分析android内存泄漏问题
- Java工作笔记:部署Tomcat时使用jni和jna调用DLL文件的问题
- [java]String变量的内存分配问题
- Java工作小问题自我总结
- 【Java】内存分配的问题
- 本以为工作好久了,这些都不是问题原来错了! java 运算符
- java学习笔记,试用初学者,第二节,关于内存地址分配问题
- java中的几个易混变量名和内存分配问题
- Java当中的内存分配以及值传递问题内存解析
- MY 总结:Java 内存分配,栈、堆。。。及相关问题解决
- Java语言描述:回溯法之最小重量机器问题
- java内存分配问题初学