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

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐