记录编号 154730 评测结果 AAAAAWAWWW
题目名称 售货员的难题 最终得分 60
用户昵称 Gravatarnew ioer 是否通过 未通过
代码语言 C++ 运行时间 0.487 s
提交时间 2015-03-24 13:58:03 内存使用 1.97 MiB
显示代码纯文本
#include<ctime>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
int n,ans,map[41][41],p[41],q[41];
void adjust(int k){
	while(k--){
		int a=rand()%(n-1)+1;
		int b=rand()%(n-1)+1;
		int c=p[a];
		p[a]=p[b],p[b]=c;
	}
}
int get_dis(){
	int sum=0,x=1;
	for(int i=1;i<n;i++)
		sum+=map[x][p[i]],x=p[i];
	return sum+map[x][1];
}
int main(){
	freopen("salesman.in","r",stdin);
	freopen("salesman.out","w",stdout);
	srand(time(0));
	scanf("%d",&n),ans=0x7fffffff;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%d",&map[i][j]);
	for(int i=1;i<n;i++) q[i]=i+1;
	for(int k=200000;k--;){
		for(int j=1;j<n;j++) p[j]=q[j];
		adjust(rand()%n+1);
		int tmp=get_dis();
		if(tmp<ans){
			ans=tmp;
			for(int j=1;j<n;j++) q[j]=p[j];
		}
	}
	printf("%d",ans);
	return 0;
}