TSP问题(利用动态规划法)

本文介绍了旅行商问题(TSP),探讨了带权图的代价矩阵,并提出了算法设计思路。同时,作者指出在源代码实现中遇到的STL库使用问题,特别是关于vector的误解,如误用==进行值比较以及erase方法导致的迭代器问题,建议深入研究STL源码以提高代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值