1.实验目的
解决工作分配问题
2.实验内容
2.1 问题描述
有n份作业分配给n个人去完成,每人完成一份作业。假定第i个人完成第j份作业需要花费cij时间,cij>0,1≦i,j≦n。试设计一个回溯算法,将n份作业分配给n个人完成,使得总花费时间最短。
2.2 问题分析
首先,计算工人和任务的所有组合方式,然后对于每一种组合方式,挑选出时间最短的一种,这里调用了python函数中的permutations全排列函数,返回工人和人物的所有可能的排列。
3.实验过程及结果
3.1 数据输入
cost = [[1,2,3,4,5],
[3,2,5,4,1],
[9,6,5,4,2],
[2,8,4,6,7],
[4,8,6,5,3]]
矩阵元素表示第i个工人完成第j个任务需要的时间
3.2 实验代码
def gettime(n,cij=cost):
index = pt(range(n),n)
task = 100
for c in index:
temp = 0
for i in range(n):
temp += cij[i][c[i]]
if temp < task:
task = temp
real_task = c
return task, real_task
task, real_task=gettime(len(cost))
为每个工人分配任务
print("花费时间:",task)
for i in range(len(real_task)):
print("第{}个工人对应的任务为第{}个".format(i+1,real_task[i]+1))