您的位置:首页 > 编程语言 > Java开发

工作分配问题 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的全排列,遍历,求出最优解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息