tsp问题动态规划python_TSP问题——动态规划
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问题——动态规划相关推荐
- 《强化学习与最优控制》学习笔记(一):确定性动态规划和随机性动态规划
写在前面的 这本书的作者是Dimitri Panteli Bertsekas教授,1942年出生于希腊雅典,美国工程院院士,麻省理工大学电子工程及计算机科学教授.Bertsekas教授因其在算法优化与 ...
- 动态规划-03-线性动态规划
一.简介 动态规划主要任务,确定状态方程(fn 和 fn-1.fn-2),和边界条件(n=1,2),联想高中递推问题. 线性动态规划的主要特点是状态的推导是按照问题规模 i 从小到大依次推过去的,较大 ...
- 【动态规划】线性动态规划
吐槽:动态规划这个东西,只要推不出状态转移方程,一切都白搭 基础知识 一. 动态规划 动态规划中最重要的三个概念:最优子结构,重复子问题,无后效性. 最优子结构:如果问题的最优解所包含的子问题的解也是 ...
- 【算法】动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )
文章目录 一.动态规划场景 二.动态规划分类 1.坐标型动态规划 2.前缀划分型动态规划 3.前缀匹配型动态规划 4.区间型动态规划 5.背包型动态规划 一.动态规划场景 动态规划 动态规划使用场景 ...
- 商旅问题TSP——动态规划(c++ 动态规划)
1.定义 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 本文以2019字节跳动春招笔试第5题,毕业旅行问题为例: 小明目前在做 ...
- 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析
// 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...
- python动态规划图解_动态规划案例之python实现(一)
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...
- 【动态规划1】动态规划的引入(今天刷洛谷了嘛)
注: P4017 最大食物链计数 因为现在还不会拓扑排序,所以暂且放到以后去解决! P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles #include&l ...
- 动态规划java LCS_动态规划递归求解LCS长度 | 学步园
这个问题的叙述太多了,就不重复了.这里我只是球出了LCS的长度,事实上,长度还是非常有用的,如判断两个字符串相似程度.主要是想说明的是,利用递归来求解.非常方便.今天下午了试了3个题,一个回文数,一个 ...
- 钢条分割 动态规划java_【动态规划】初识,钢条切割问题
正文之前其实动态规划老早之前就看过, 但是可惜的是印象不深,到今天彻底忘得差不多了,这两天看<算法导论>终于让我啃下了二叉搜索树和红黑树两个家伙,虽然还未曾熟练于胸,但是基本能用了...现 ...
最新文章
- Java面试题及答案整理(2022年140道)持续更新
- 试用memcached高可用repcached
- Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
- mxnet DepthwiseConv2D
- 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)
- jzoj100029. 【NOIP2017提高A组模拟7.8】陪审团(贪心,排序)
- 计算机图形学Web前端笔记-图形平移放缩原理及实现(two.js鼠标事件适用所有渲染)
- 字符串第一个出现的单个字符_如何在不编写单个应用程序的情况下找到我的第一个开发人员工作
- 心跳监测器 IHeartBeatChecker
- python 如何获取文件夹下所有的目录。
- 获取textarea每一行的内容_PLC编程的基本原则和方法,64页内容介绍PLC编程,值得收藏...
- Tcp网络通信中各个状态的含义
- webstorm 2017 激活破解方法大全
- 机器学习(十)——期望值最大算法(EM算法)
- HTML和CSS实现京东首页(附GitHub地址)
- 4.2w字,详细的带你认识基础I/O【Linux--基础IO】
- 中午午睡失眠,写了一些备忘
- 考研证件照不能戴眼镜,不能PS,要求素颜审核非常严?
- 互联网寒冬,软件测试尚能饭否?
- Spring Boot安装及使用(2021.10.28)
热门文章
- 计算机网络体系结构与数据通信(一) 概述
- PAT乙级-1028人口普查
- 联想服务器电脑找不到wifi网络,联想笔记本无线网络找不到怎么办
- RapidMiner遇到的问题
- 添加透明FLASH和FLASH大全
- 【学习】从零开始的Android音视频开发(6)——MediaPlayerService中BinderDriver、创建播放器过程、建立StageFright层交互
- Windows XP优化指南
- 防不胜防 这些游戏被外挂活生生地毁了
- linux ubuntu软件中心,Ubuntu 20.04 将Ubuntu软件中心切换到Snap商店
- win10默认壁纸_渐变彩色Hero壁纸,微软免费Win10主题《Pride 2020 Flags》下载