Traveling Salesman Problem

Description:                    Time Limit: 4sec    Memory Limit:256MB

有编号1到N的N个城市,问从1号城市出发,遍历完所有的城市并最后停留在N号城市的最短路径长度。

Input:

第一行整数 T :T组数据 (T<=20)

每个case 读入一个N( 2 <= N <= 20),接着输入N行,第i行有两个整数 xi , yi 表示第 i 个城市坐标轴上的坐标 。

Output:

每个case输出一个浮点数表示最短路径。四舍五入保留两位小数。

Sample Input:

1 4 0 0 1 0 1 1 0 1

Sample Output:

3.41

经典难题!数据开到这么小就知道没有那么简单的复杂度了,一般的算法,即爆搜,复杂度为 o( n! ) ,我们这里采用的动态规划算法,

算法复杂度已经从阶乘级降到了o( ( n^2 )*( 2^n ) ) (看起来也是相当恐怖的,不过像这种经典难题这种复杂度对我来说已经不错了)。

开始说说思路,一开始马上想到的必然是搜索,搜索必然超时,于是某大神直接告诉我——记忆化搜索,记忆化搜索能做的动规就能做,写递归太麻烦了于是动规!

题目中起点终点确定,我们可以考虑用一个二维dp数组来保存一个状态——dp[i]{V}表示从结点0到结点 i 途经V中所有节点的最短路径长(这里的V是一个集合)

于是状态转移方程可以为:dp[i]{V}=min( dp[i]{V} , dist[i][j]+dp[j]{V-{j}} )  (j 属于 V)

大思路定好了,我们来考虑细节部分,主要有以下部分:

1)建图等等:结构体point,距离函数dist;

2)集合V的表示:二进制数,即010表示三个数的集合第二个有,其余无;

3)dp过程的范围:1 ~ n-1 (最大可能为 1 ~ 18 );

于是我们可以敲代码啦!

#include

const double INF=10e7;

using namespace std;

int T,n,cnt;

double a[25][25],dp[25][1100000];

struct point{//结点结构体

int x,y;

}pt[25];

double d(point a,point b){//结点间距离

return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));

}

int main()

{

scanf("%d",&T);

while(T--)

{

cnt=1;

scanf("%d",&n);

for(int i=2;i

for(int i=0;i

scanf("%d %d",&pt[i].x,&pt[i].y);

for(int i=0;i

for(int j=0;j

a[i][j]=d(pt[i],pt[j]);

for(int i=0;i

for(int j=0;j

dp[i][j]=INF;

for(int i=0;i

dp[i][0]=a[i][0];

for(int i=1;i

for(int j=1;j

{

for(int k=1;k

{

if((1<

dp[j][i]=min(dp[j][i],a[j][k]+dp[k][i-(1<

}

}

double ans=INF;

for(int i=1;i

ans=min(ans,dp[i][cnt-1]+a[i][n-1]);

printf("%.2lf\n",ans);

}

return 0;

}

之前动态规划也是做了不少的基础例题,这道题算是动态规划的第一次成功应用,还是蛮开心的,软创得加油啊!

tsp问题动态规划python_TSP问题——动态规划相关推荐

  1. 《强化学习与最优控制》学习笔记(一):确定性动态规划和随机性动态规划

    写在前面的 这本书的作者是Dimitri Panteli Bertsekas教授,1942年出生于希腊雅典,美国工程院院士,麻省理工大学电子工程及计算机科学教授.Bertsekas教授因其在算法优化与 ...

  2. 动态规划-03-线性动态规划

    一.简介 动态规划主要任务,确定状态方程(fn 和 fn-1.fn-2),和边界条件(n=1,2),联想高中递推问题. 线性动态规划的主要特点是状态的推导是按照问题规模 i 从小到大依次推过去的,较大 ...

  3. 【动态规划】线性动态规划

    吐槽:动态规划这个东西,只要推不出状态转移方程,一切都白搭 基础知识 一. 动态规划 动态规划中最重要的三个概念:最优子结构,重复子问题,无后效性. 最优子结构:如果问题的最优解所包含的子问题的解也是 ...

  4. 【算法】动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

    文章目录 一.动态规划场景 二.动态规划分类 1.坐标型动态规划 2.前缀划分型动态规划 3.前缀匹配型动态规划 4.区间型动态规划 5.背包型动态规划 一.动态规划场景 动态规划 动态规划使用场景 ...

  5. 商旅问题TSP——动态规划(c++ 动态规划)

    1.定义 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 本文以2019字节跳动春招笔试第5题,毕业旅行问题为例: 小明目前在做 ...

  6. 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析

    // 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  7. python动态规划图解_动态规划案例之python实现(一)

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...

  8. 【动态规划1】动态规划的引入(今天刷洛谷了嘛)

    注: P4017 最大食物链计数 因为现在还不会拓扑排序,所以暂且放到以后去解决! P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles #include&l ...

  9. 动态规划java LCS_动态规划递归求解LCS长度 | 学步园

    这个问题的叙述太多了,就不重复了.这里我只是球出了LCS的长度,事实上,长度还是非常有用的,如判断两个字符串相似程度.主要是想说明的是,利用递归来求解.非常方便.今天下午了试了3个题,一个回文数,一个 ...

  10. 钢条分割 动态规划java_【动态规划】初识,钢条切割问题

    正文之前其实动态规划老早之前就看过, 但是可惜的是印象不深,到今天彻底忘得差不多了,这两天看<算法导论>终于让我啃下了二叉搜索树和红黑树两个家伙,虽然还未曾熟练于胸,但是基本能用了...现 ...

最新文章

  1. Java面试题及答案整理(2022年140道)持续更新
  2. 试用memcached高可用repcached
  3. Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
  4. mxnet DepthwiseConv2D
  5. 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)
  6. jzoj100029. 【NOIP2017提高A组模拟7.8】陪审团(贪心,排序)
  7. 计算机图形学Web前端笔记-图形平移放缩原理及实现(two.js鼠标事件适用所有渲染)
  8. 字符串第一个出现的单个字符_如何在不编写单个应用程序的情况下找到我的第一个开发人员工作
  9. 心跳监测器 IHeartBeatChecker
  10. python 如何获取文件夹下所有的目录。
  11. 获取textarea每一行的内容_PLC编程的基本原则和方法,64页内容介绍PLC编程,值得收藏...
  12. Tcp网络通信中各个状态的含义
  13. webstorm 2017 激活破解方法大全
  14. 机器学习(十)——期望值最大算法(EM算法)
  15. HTML和CSS实现京东首页(附GitHub地址)
  16. 4.2w字,详细的带你认识基础I/O【Linux--基础IO】
  17. 中午午睡失眠,写了一些备忘
  18. 考研证件照不能戴眼镜,不能PS,要求素颜审核非常严?
  19. 互联网寒冬,软件测试尚能饭否?
  20. Spring Boot安装及使用(2021.10.28)

热门文章

  1. 计算机网络体系结构与数据通信(一) 概述
  2. PAT乙级-1028人口普查
  3. 联想服务器电脑找不到wifi网络,联想笔记本无线网络找不到怎么办
  4. RapidMiner遇到的问题
  5. 添加透明FLASH和FLASH大全
  6. 【学习】从零开始的Android音视频开发(6)——MediaPlayerService中BinderDriver、创建播放器过程、建立StageFright层交互
  7. Windows XP优化指南
  8. 防不胜防 这些游戏被外挂活生生地毁了
  9. linux ubuntu软件中心,Ubuntu 20.04 将Ubuntu软件中心切换到Snap商店
  10. win10默认壁纸_渐变彩色Hero壁纸,微软免费Win10主题《Pride 2020 Flags》下载