TSP问题
TSP问题是什么?
TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路线图最短。
题目
带权图的代价矩阵
无穷 | 3 | 6 | 7 |
---|---|---|---|
5 | 无穷 | 2 | 3 |
6 | 4 | 无穷 | 2 |
6 | 7 | 5 | 无穷 |
算法设计思路
待补充
源代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
using namespace std;
struct Subset //此结构体表示我们的每个子集
{
int index;//本子集中最后一个元素对应到数组的下标
vector<int> v; //子集用vector数组来表示,方便
};
struct Point
{
int x;
int y;
};
int get_subset_num(int num) {
//获取数组的子集总个数
int sum = 1;
for (int i = 0; i < num; i++) {
sum *= 2;
}
return sum;
}
void cal_subset(Subset* Psubset,int num,int *array) {
//计算子集,传入存放所有子集的数组和数组长度和对应数组
Psubset[0].index = -1;//对于空子集,我们将其中每个属性设置为-1
Psubset[0].v.push_back(-1);
for (int i = 0; i < num; i++) {
//初始化第一层的子集,也就是元素个数为1的子集们
Psubset[i + 1].index = i;
Psubset[i + 1].v.push_back(array[i]);
}
int pre = 1; int ord = 4;//pre和ord夹着一层子集,初始的时候夹着元素个数为1的子集
int now = ord + 1;//当前需要计算的子集在子集数组中的下标
for (