TSP问题】的更多相关文章

题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一个地方可重复访问多次. 经典的状压dp,因为每次送外卖不超过10个地方,可以压缩. 由于题中明确说了两个城市间的直接可达路径(即不经过其它城市结点)不一定是最短路径,所以需要借助floyd首先求出任意两个城市间的最短距离. 然后,在此基础上来求出遍历各个城市后回到出发点的最短路径的距离,即求解TSP…
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而且这一次解决的是离散型问题,上一次解决的是连续型问题,刚好形成对照. 首先介绍一下TSP问题.TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长,到目前为止还没有找到一个多项式时间的有效算法.TS…
上篇我们用遗传算法求解了方程,其中用到的编码方式是二进制的编码,实现起来相对简单很多, 就连交配和变异等操作也是比较简单,但是对于TSP问题,就稍微复杂一点,需要有一定的策略, 才能较好的实现. 这次的TSP问题的题目是: 随机产生10~30个城市,每个城市之间的距离也是随机产生,距离的范围是[1,50],求最优的路径 ========================================================== 下面就是具体的求解,由于我的策略是基于知网上的<一种改进的遗…
1.编码 这篇文章中遗传算法对TSP问题的解空间编码是十进制编码.如果有十个城市,编码可以如下: 0 1 2 3 4 5 6 7 8 9 这条编码代表着一条路径,先经过0,再经过1,依次下去. 2.选择 选择操作仍然是轮盘赌模型,虽然不会出现路径长度为负数的情况,但是需要考虑与上篇文章不同的是求的是最小值.因此在代码中概率的计算为: 3.交叉 4.变异 变异操作就是交换两个城市,例如: 0 1 2 3 4 0 2 1 3 4 5.代码实现 #include<stdio.h> #include&…
做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(TSP) 描述 Shrek是一个大山里的邮递员,每天负责给所在地区的n个村庄派发信件.但杯具的是,由于道路狭窄,年久失修,村庄间的道路都只能单向通过,甚至有些村庄无法从任意一个村庄到达.这样我们只能希望尽可能多的村庄可以收到投递的信件. Shrek希望知道如何选定一个村庄A作为起点(我们将他空投到该村…
没看过TSP,先mark //4838039 2011-10-27 23:04:15 Accepted 4026 2343MS 31044K 3143 B C++ Geners //状态压缩DP的TSP问题 //优先级位运算小于判等 , 还有各种细节各种出错 #include <cstdio> #include <cstring> #include <stdlib.h> #define mabs(a) (a>0?a:-(a)) using namespace st…
问题来源:刘汝佳<算法竞赛入门经典--训练指南> P61 问题9: 问题描述:有n(n<=15)个城市,两两之间均有道路直接相连,给出每两个城市i和j之间的道路长度L[i][j],求一条经过每个城市一次且仅一次,最后回到起点的路线,使得经过的道路总长度最短(城市编号为0~n-1). 分析: 1.因为最后走的路线为一个环,可以设城市0为起点城市. 2.将每个城市看作二进制的一个位(1代表有,0代表没有),则数k可以表示一些城市的集合(例如k=13,二进制表示为1101,表示城市0,2,3的…
题意:n+1个点:0--n,找一条路径从0点出发遍历1--n的点再回到0,每个点可经过不止一次,求最短路径 裸的TSP问题,先用Floyd求出各个点之间最短路,再状压dp即可 用n+1位二进制表示状态 附模板: //首先不难想到用FLOYD先求出任意2点的距离dis[i][j] //接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过 //定义状态DP(S,i)表示在S状态下,到达城市I的最优值 //接着状态转移方程:DP(S,i) = min{DP(S^(1…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出来. 最少耗时肯定是从起点出发,把所有石子点走一遍且只走一遍,把石子装在车上,然后最后回到起点. 由于石子堆最多也就10个.不难看出这就是个裸的TSP. 首先BFS计算出每个石子间的最短路.当时打BC的时候SB了,这题图没有障碍,直接根据坐标算就行了. 然后进行TSP就行了. 起点的石子无所谓.所以…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的任务是访问完所有隧道且仅一次,求最短耗时. 解题思路: 暑假练习的时候.把英文读了N遍也没理解题意. 其实就是个最后不回到开头的TSP. 首先求BFS求两两隧道之间的最短路,注意BFS的起点是隧道i的终点,BFS的终点是隧道j的起点. 一定要特判一下两个隧道终点和起点是否一样,如果一样话dis=0,…