TSP问题的贪心算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
int b[100][100];
int mins(int p,int n) //求某一列中最小的那个数
{
int min,i,j;
for(i=1;i<=n;i++)
{
b[p][i]=9999;
}
min=b[1][p];
j=1;
for(i=2;i<=n;i++)
{
if(b[i][p]
min=b[i][p];
j=i;
}
}
return(j);
}
int main()
{
int a[100][100],i,j,n,x,y,qs,t;
for(i=0;i<100;i++) //使数组中的数都为9999
{
for(j=0;j<100;j++)
a[i][j]=9999;
}
printf("请输入城市个数:");//确定数组大小
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
printf("请输入第%d个到第%d个城市的距离:",i,j);
scanf("%d",&a[i][j]);
a[j][i]=a[i][j];
}
}
printf("请输入起始城市:" );
scanf("%d",&qs);
printf("贪心算法求得的最优路径为:%d->",qs);
y=qs;
t=0;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
b[i][j]=a[i][j];
}
}
for(i=1;i
x=mins(y,n);
printf("%d->",x);
t+=a[y][x];
y=x;
}
printf("%d\n",qs);
t+=a[qs][x]; //加上最后回到起始位置的长度
printf("路径总长度为:%d\n",t);
return 0;
}