#include<stdio.h>
#define INF 999
using namespace std;
const int n=5;
int TSP(int arc[n][n], int w) //从顶点w出发
{
int edgeCount=0, TSPLength=0;
int min,u,v;
int flag[n]={0}; //顶点均未加入哈密顿回路
u=w;
flag[w]=1; //将点w加入哈密顿回路
while(edgeCount<n-1) //循环直到边数等于n-1
{
min=100;
for(int j=0; j<n; j++)
{
if( (flag[j]==0) && (arc[u][j]!=0) && (arc[u][j]<min) )
{
v=j;
min=arc[u][j];
}
}
TSPLength+=arc[u][v];
flag[v]=1; //将顶点加入哈密顿回路
edgeCount++;
printf("%d-->%d\n",u+1,v+1);
u=v; //下一次从顶点v出发
}
printf("%d-->%d\n",v+1,w+1); //输出最后的回边
return (TSPLength+arc[u][w]);
}
int main(void)
{
int arc[n][n];
arc[0][0]=INF; arc[0][1]=3; arc[0][2]=3; arc[0][3]=2; arc[0][4]=6;
arc[1][0]=3; arc[1][1]=INF; arc[1][2]=7; arc[1][3]=3; arc[1][4]=2;
arc[2][0]=3; arc[2][1]=7; arc[2][2]=INF; arc[2][3]=2; arc[2][4]=5;
arc[3][0]=2; arc[3][1]=3; arc[3][2]=2; arc[3][3]=INF; arc[3][4]=3;
arc[4][0]=6; arc[4][1]=2; arc[4][2]=5; arc[4][3]=3; arc[4][4]=INF;
int w=0;
int s=0;
s=TSP(arc,0);
printf("用贪心算法求得的最短路径是:%d",s);
return 0;
}
贪心法———TSP问题
最新推荐文章于 2021-06-18 11:08:35 发布