工作分配问题 Java 回溯

来源:互联网 发布:淘宝服装拍摄平铺 编辑:程序博客网 时间:2024/05/17 03:43
问题描述: 

    设有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[n][n];t=new int[n][n];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的全排列,遍历,求出最优解

0 0
原创粉丝点击