任务分配问题算法代码简化至34行
问题:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。
源代码:
import java.util.Arrays;
public class Assignment {
static int arr[][]= {{9,2,7,8},{6,4,3,7},{5,8,1,8},{7,6,9,4}};
static int min=arr[0][0]+arr[1][0]+arr[2][0]+arr[3][0];
public static void main(String args[]) {
int solve[]= {0,1,2,3};
assignment(solve,0);
}
static void assignment(int solve[],int i) {
if(i==arr.length) {
int temp=check(solve);
if(temp<min) {
min=temp;
System.out.println("Min: "+min+" Solve: "+Arrays.toString(solve));
}
}
for(int j=i;j<arr.length;j++) {
swap(solve,i,j);
assignment(solve,i+1);
swap(solve,i,j);
}
}
static int check(int solve[]) {
int sum=0;
for(int i=0;i<solve.length;i++)
sum+=arr[i][solve[i]];
return sum;
}
static void swap(int solve[],int i,int j) {
int t=solve[i];
solve[i]=solve[j];
solve[j]=t;
}
}
运行结果: