问题描述:设有n件工作分配给n个人。将工作i分配给第j个人的费用为cij,请设计算法,为每个人都分配1件不同的工作,并使得总费用达到最小。
#include <bits/stdc++.h>
using namespace std;
int n,ans,mins=0x7fffffff;
int zj[100][100];
bool f[100];
int change() {
if(ans<mins)
mins=ans;
}
int search(int x) {
for(int j=1; j<=n; j++) {
if(!f[j]) {
f[j]=1;
ans+=zj[x][j];
if(x==n) change();
else search(x+1);
f[j]=0;
ans-=zj[x][j];
}
}
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++)
cin>>zj[i][j];
}
search(1);
cout<<mins<<endl;
return 0;
}