贪心法之TSP问题

来源:互联网 发布:centos 文件夹扩容 编辑:程序博客网 时间:2024/05/20 23:34

数组arc[][]表示的是各边的代价

TSPLength中存储的是最短的哈密顿回路

flag[]表示顶点是否已加入哈密顿回路

// 0521.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;#define n 5int TSP(int arc[n][n],int w){int edgeCount=0;int TSPLength;TSPLength=0;int min,u,v;int flag[n]={0};u=w;flag[w]=1;while(edgeCount<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++;cout<<u<<"-->"<<v<<endl;u=v;}cout<<v<<"-->"<<w<<endl;return(TSPLength+arc[u][w]);}int main(){int arc[n][n];int w;cout<<"输入无向图点和边的关系:"<<endl;      for(int i=0; i<n; i++)          for(int j=0; j<n; j++)          {              int a;              cin>>a;              arc[i][j]=a;          }  cout<<"输入出发的顶点:";cin>>w;cout<<TSP(arc, w)<<endl;return 0;}