TSP问题,动态规划法

article/2025/9/29 20:53:27

    TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。各个城市间的距离可以用代价矩阵来表示。

    假设从顶点i出发,令d(i, V')表示从顶点i出发经过V'中各个顶点一次且仅一次,最后回到出发点i的最短路径长度,开始时,V'=V-{i},于是,TSP问题的动态规划函数为:

d(i,V')=min{cik+d(k,V-{k})}(k∈V')

d(k,{})=cki(k≠i)

    伪代码:

for (i=1; i<n; i++)     //初始化第0列d[i][0]=c[i][0]; for (j=1; j<2n-1-1; j++)  for (i=1; i<n; i++)   //依次进行第i次迭代if (子集V[j]中不包含i) 对V[j]中的每个元素k,计算[i][j]=min(c[i][k]+d[k][j-1]);
对V[2n-1-1]中的每一个元素k,计算d[0][2n-1-1]=min(c[0][k]+d[k][2n-1-2]);
输出最短路径长度d[0][2n-1-1];

    笔者在写此程序时卡在了如何判断:子集V[j]中不包含i。解决方法是对n个顶点分别用0~n-1的数字编号,按个数为1,2,……,n-1的顺序生成1~n-1个元素的子集存放在数组V[2^n-1]中。这样,在判断时就可以将当前点与数组编号按位与运算(如下图所示),为0则为需要进行计算(这时才能品味按位与运算的美)。


    完整代码:

#include<iostream.h>
#include<math.h>
int main()
{int i,j,k,min,brief,n;int D[20][20];cout<<"顶点个数:";cin>>n;int b=(int)pow(2,n-1);for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>D[i][j];int ** Route = (int **)calloc(n, sizeof(int *));int ** Mat = (int **)calloc(n, sizeof(int *));for(i=0;i<n;i++){Route[i] = (int *)calloc(b*b, sizeof(int))+i*b;Mat[i] = (int *)calloc(b*b, sizeof(int))+i*b;}for(i=0;i<b;i++)for(j=0;j<n;j++){Route[j][i] = -1;Mat[j][i] = -1;}for(i=0;i<n;i++)//初始化第0列 Route[i][0] = D[i][0];    for(i=1;i<b-1;i++)for(j=1;j<n;j++)//依次进行第i次迭代 if( ((int)pow(2,j-1) & i) == 0)//子集V[j不包含i {min=999;for(k=1;k<n;k++)if( (int)pow(2,k-1) & i ){brief = D[j][k] + Route[k][i-(int)pow(2,k-1)]; if(brief < min){min = brief;Route[j][i] = min;Mat[j][i] = k;//局部最优决策}}    }min=999;for(k=1;k<n;k++){brief = D[0][k] + Route[k][b-1 - (int)pow(2,k-1)];if(brief < min){min = brief;Route[0][b-1] = min;//最优解Mat[0][b-1] = k;}}cout<<"最短路径长度:"<<Route[0][b-1]<<endl;//最短路径长度cout<<"最短路径:"<<"1";for(i=b-1,j=0; i>0; ){j = Mat[j][i];i = i - (int)pow(2,j-1);cout<<"->"<<j+1;}cout<<"->1"<<endl;for(i=0;i<n;i++){for(j=0;j<b;j++)cout<<Route[i][j]<<" ";cout<<endl;}free(Route);free(Mat);return 0;
}

http://chatgpt.dhexx.cn/article/wwqSV5aS.shtml

相关文章

动态规划法的基本知识

一、动态规划方法相关概念 1、20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时&#xff0c;提出了著名的最优性原理(principle of optimality),同时&#xff0c;把多阶段过程转化为一系列单阶段问题&#xff0c;利用各阶…

动态规划法及其优化

在很多问题中&#xff0c;动态规划算法是我们的最优选择&#xff0c;比起递归算法&#xff0c;动态规划算法的时间复杂度和空间复杂度都更加优越&#xff0c;可以处理的数据规模更大。但是&#xff0c;动态优化算法的时间复杂度为O&#xff08;N*V&#xff09;&#xff0c;也就…

算法设计与分析之动态规划法

文章目录 前言一、动态规划法概述二、动态规划法设计思想三、动态规划法的基本要素四、动态规划算法的设计步骤五、动态规划法与分治法六、动态规划法与贪心法七、动态规划法示例总结 前言 大家好&#xff0c;我是一只勤勤恳恳的程序猿。本篇文章小猿将跟您分享算法设计与分析中…

算法-动态规划法

动态规划是在20世纪50年代由美国数学家贝尔曼为研究最优控制问题而提出的&#xff0c;当该方法在应用数学中的价值被大家认同以后&#xff0c;在计算机学界&#xff0c;动态规划法成为一种通用的算法设计技术用来求解多阶段决策最优化问题。 所以&#xff0c;同学们&#xff0…

动态规划算法

一 动态规划算法 动态规划(Dynamic Programming)算法的核心思想是&#xff1a;将大问题划分为小问题进行解决&#xff0c;从而一步步获取最优解的处理算法。 动态规划算法与分治算法类似。其基本思想也是将待求解问题分解成若干个子问题&#xff0c;先求解子问题&#xff0c;…

经典中的经典算法:动态规划(详细解释,从入门到实践,逐步讲解)

动态规划的重要性就不多说,直接进入正题 首先,我们看一下官方定义:定义: 动态规划算法是通过拆分问题&#xff0c;定义问题状态和状态之间的关系&#xff0c;使得问题能够以递推&#xff08;或者说分治&#xff09;的方式去解决。 动态规划算法的基本思想与分治法类似&#xf…

目标检测中的多尺度特征结合方式

目录 简述 解构物体检测各个阶段 FPN的演进 1&#xff09;无融合 2&#xff09;自上而下单向融合 a&#xff09;Faster/Master/Cascade RCNN中的FPN b&#xff09;RetinaNet中的FPN c&#xff09;Yolov3中的FPN 3&#xff09;简单双向融合 4&#xff09;复杂的双向融…

总结-CNN中的目标多尺度处理

Fly-AI竞赛服务平台 flyai.com 在开始学习之前推荐大家可以多在 FlyAI竞赛服务平台多参加训练和竞赛&#xff0c;以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例&#xff0c;支持算法能力变现以及快…

【MFEN:轻量级多尺度特征提取:SR网络】

MFEN: Lightweight multi-scale feature extraction super-resolution network in embedded system &#xff08;MFEN&#xff1a;嵌入式轻量级多尺度特征提取超分辨率网络&#xff09; 深度卷积神经网络&#xff08;CNN&#xff09;在超分辨率&#xff08;SR&#xff09;方面…

深度学习笔记---多尺度网络结构归类总结

目录 1.什么是图像金字塔 1.1 高斯金字塔 ( Gaussian pyramid): 1.2 拉普拉斯金字塔&#xff08;Laplacian pyramid&#xff09; 1.3 DOG金字塔 2. 多尺度网络&#xff08;MTCNN&#xff09; 2.1 多尺度输入网络 2.2 多尺度特征融合网络 2.2.1 并行多分支网络 2.2.2 串行…

【边缘注意:深度多尺度特征】

Learning a Deep Multi-Scale Feature Ensemble and an Edge-Attention Guidance for Image Fusion &#xff08;学习深度多尺度特征集成和图像融合的边缘注意指南&#xff09; 在本文中&#xff0c;我们提出了一种用于红外和可见光图像融合的深度网络&#xff0c;该网络将具…

多尺度特征的提取

1、图像金字塔 将图片进行不同尺度的缩放&#xff0c;得到图像金字塔&#xff0c;然后对每层图片提取不同尺度的特征&#xff0c;得到特征图。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通过梯次向下采样获得&…

MSRN(多尺度超分辨率重建)

目前的研究倾向于使用更深层次的卷积神经网络来提高性能。然而,盲目增加网络深度不能有效改善网络。更糟糕的是,随着网络深度的增加,训练过程中出现了更多的问题,需要更多的训练技巧。在本文中,我们提出了一种新颖的多尺度残差网络 (MSRN) 来充分利用图像特征,该网络优于…

【multi_scale】多尺度训练——目标检测训练trick

文章目录 1 多尺度训练的介绍2 代码解析3 感谢链接 1 多尺度训练的介绍 多尺度训练对全卷积网络有效&#xff0c;在训练时&#xff0c;每隔一定的 iterations&#xff0c;在一定尺寸范围内&#xff0c;随机选取一种 img_size 进行训练。通过对不同尺度的图像进行训练&#xff…

“多尺度”目标检测问题

一、“多尺度”目标检测问题简介 在目标检测任务中,被测目标的大小经常是不固定的,自动驾驶相关检测任务可能要同时检测大卡车与小狗;工业质检相关检测任务可能要同时检测布料的大面积撕裂与小穿孔;医疗病灶检测任务可能要同时检测大小不一的病灶。在被测物体尺度相差极大…

图像多尺度技术

1197 多尺度图像技术也叫做多分辨率技术&#xff08;MRA&#xff09;&#xff0c;指对图像采用多尺度的表达&#xff0c;并且在不同尺度下分别进行处理。这样做的理由是很多情况下在一种尺度中不容易看清的或者获取的特性在另外的某种尺度下就很容易发现或者是提取。所以多尺度…

目标检测中多尺度:特征金字塔FPN_Feature Pyramid Networks for Object Detection

原始内容来源于&#xff1a; https://blog.csdn.net/cdknight_happy/article/details/100528127 https://blog.csdn.net/WZZ18191171661/article/details/79494534 包含理解&#xff01; 参考文献&#xff1a;https://arxiv.org/abs/1612.03144 代码实现&#xff1a;http://ww…

MViTv2 多尺度视觉Transformer

虽然VIT&#xff08;vision transformer&#xff09;模型提出后&#xff0c;Transformer在CV领域一路攻城拔寨&#xff0c;不断刷新由自己创下的记录&#xff0c;但VIT文章中所说明的视觉领域transformer很大程度上受transformer模型平方复杂度的限制而在大尺度图像上表现不佳的…

综述:目标检测中的多尺度检测方法

传统卷积网络通常采用从上到下的单行结构。对于大物体而言&#xff0c;其语义信息将出现在较深的特征图中&#xff1b;而对于小物体&#xff0c;其语义信息出现在较浅的特征图中&#xff0c;随着网络的加深&#xff0c;其细节信息可能会完全消失。 多尺度检测也是当今物体检测领…

【笔记】多尺度方法

1.定义 2.常用架构 2.1多尺度输入网络 2.2 多尺度特征融合网络 (1) 并行多分支结构 (2) 串行多分支结构 2.3 多尺度特征预测融合 2.4 多尺度特征和预测融合 3.具体方法 3.1 SNIP 3.2 SNIPER&#xff08;SNIP的改进&#xff09; 3.3 SSD 3.4 TridentNet&#xff08;…