问题描述
给定一个n顶点网络(有向或无向),找出一个包含n个顶点且具有最小耗费的换路。任何一个包含网络所有顶点的换路称为一个旅行。旅行商问题(Traveling Salesman Problem,TSP)是要寻找一条耗费最少的旅行。
图1 四顶点网络
如图1是一个四顶点无向网络。这个网络的一些旅行:1,2,4,3,1;1,3,2,4,1和1,4,3,2,1。旅行1,2,4,3,1的耗费为66,;旅行1,3,2,4,1的耗费为25;旅行1,4,3,2,1的耗费为55.故1,3,2,4,1是网络中耗费最少的旅行。
算法设计分析
旅行是包含所有顶点的一个循环,所以可以把任意顶点作为起点也是终点,我们选择顶点1作为起点和终点。于是可以用[1,x2…,xn,1]表示一个旅行,那么x2到xn的所有排列构成n顶点旅行商问题的解空间。
图2 四顶点网络的解空间树
城市之间的旅行耗费存储在二维数组cost[n][n]
中, bestCostSoFar
表示当前最优旅行,
C++实现
#include<iostream>
using namespace std;
#define N 5
//全局变量
int n = N -