#include"stdio.h"
#include"stdlib.h"
int map[13][13],a[14],n;
int best=65535;
int swap(int *a,int *b)//交换函数
{
int c;
c=*a;*a=*b;*b=c;
}
int sum(int k)//累加函数
{
int tmp=0,i;
for(i=1;i<=k;i++)
tmp+=map[i][a[i]];
return tmp;
}
void back(int k)
{
int sum1=0,i;
if (k==n)
{
sum1=sum(n);
if (sum1<best) best=sum1;
return;
}
for(i=k;i<=n;i++)
{
swap(&a[i],&a[k]);
if (sum(k)<best)
back(k+1);
swap(&a[i],&a[k]);
}
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
}
for(i=1;i<=n;i++)
a[i]=i;
back(1);
printf("%d\n",best);
}
/*
4
3 8 4 12
9 12 13 5
8 7 9 3
12 7 6 8
*/
回溯法——任务分配问题
原文作者:回溯法
原文地址: https://blog.csdn.net/code_AC/article/details/51056174
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/code_AC/article/details/51056174
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。