实践问题:工作分配问题
问题描述:
有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。 输入格式: 输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。 输出格式: 将计算出的最小总费用输出到屏幕。
算法描述
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int p[100][100],sum,minn,i,j,n;
bool b[100];
void dfs(int dep)
{
int r;
for (r=1;r<=n;++r)
if (!b[r])
{
b[r]=1;
sum+=p[r][dep];
if (dep==n)
{
if (sum<minn)
minn=sum;
}
else
if (sum<minn)
dfs(dep+1);
sum-=p[r][dep];
b[r]=0;
}
}
int main()
{
scanf("%d",&n);//input people number and work number
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
scanf("%d",&p[i][j]);
sum=0;
minn=10000;//赋值
dfs(1);
printf("%d",minn);//output
return 0;
}
剪枝方法:
else if (sum<minn) dfs(dep+1); sum-=p[r][dep]; b[r]=0;
心得体会:对这个问题还是不是很了解,这不是一个好的代码,还是要加深体会
原文:https://www.cnblogs.com/ewerin/p/10165349.html