求大神改一下这个代码 回溯法的任务分配问题 用C语言

2025-02-26 23:16:42
推荐回答(1个)
回答1:

#include 
#include 
int n, a[21][21], sum, best, b[21], c[21], d[21];
void f(int m) {
int i,j;
if(m>n) {
if(best==-1||sum best=sum;
memcpy(d,c,sizeof(d));
return;
}
for(j=1;j<=n;j++) {
if(!b[j]) {
sum+=a[m][j]; b[j]=1;
c[m] = j;
if(sum f(m+1);
sum-=a[m][j]; b[j]=0;
}
}
}

int main() {
int i,j;
printf("请输入作业数:");
scanf("%d",&n);
printf("作业分配给不同工人所需费用: ");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
sum=0;
best=-1;
f(1);
printf("最小总费用为:%d\n", best);
printf("作业");
for(i=1;i<=n;i++) {
printf("%3d", i);
}
printf("分别分给第");
for(i=1;i<=n;i++) {
printf("%3d", d[i]);
}
puts("个工人!作业分配完毕!");
return 0;
}