问题描述
求解下图所示的TSP问题,计算出所经过的城市编号以及最短路径值,城市代价矩阵如图所示:
求解思路
给定n个城市的无向带权图G(V,E),顶点代表城市,权值代表城市之间的距离。若城市之间没有路径,则距离为无穷。
城市之间的距离存放在二维数组value[][]中。
从城市1出发,先到临近城市2,将走过的路程存放在变量 cl 中。
bestl代表当前找到的一种最短路径长度。如走法:1-2-3-4-5-1
显然,向城市深处走时,cl只会增加。因此当cl>bestl时,不必再往深处走。
限界条件为cl<bestl, cl 初值为0,bestf初值为∞
代码实现
#include<iostream>
using namespace std;
/*回溯法求解TSP问题,采用排列树、深度优选搜索的方法
由于课本中没有给出算法,故在此给出算法设计
变量:
1.城市个数n
2.城市之间的距离value[][]
3.城市走过的路程cl
4.最短路径bestx[]
5.城市编号数组x[]
步骤:
*/
#define MAXLENGTH 10
//城市个数
int n;
//城市之间的距离
int value[MAXLENGTH][MAXLENGTH];
//城市编号
int citys[MAXLENGTH];
//最优路径
int bestx[MAXLENGTH];
int maybex[MAXLENGTH];
//经过的路径
int cl = 0;
//最优路径长度
int bestl = 999;
int maybel = 999;
//修正函数原型声明
void Modify();
//Tsp函数原型声明
void Tsp(int n);
int main(){
//计数使用
int i, j;
printf("请输入城市个数:");
scanf("%d", &n);