贪心法———TSP问题

#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;
}


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值