任务分配问题算法

任务分配问题算法代码简化至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;
	}
}

运行结果:
在这里插入图片描述

发布了53 篇原创文章 · 获赞 1 · 访问量 2774

猜你喜欢

转载自blog.csdn.net/weixin_43873198/article/details/105536296
今日推荐