货郎担问题(TSP问题)
货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。
有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短?
货郎担问题要从图g的所有周游路线中求取具有最小成本的周游路线,而由始点出发的周游路线一共有(n一1)!条,即等于除始结点外的n一1个结点的排列数,因此货郎担问题是一个排列问题。通过枚举(n一1)!条周游路线,从中找出一条具有最小成本的周游路线的算法,其计算时间显然为o(n!)。
解货郎担问题:核心是动态规划,自底向上的思想。
下面是代码:我还没写出来……
哼哼:弄出来了
1 public class Main { 2 3 private static int N = 6; //此例中共有6个点 4 private static int index = 1; //货郎担问题 解的时候假定了第一个起始点就是0,所以从1开始 5 private int x[] = new int[N]; //每个x[index] 存放的是位置为index 的点 比如index=0 x[1] = 2 位于位置1的点是 点2 6 private static int bestX[] = new int[N]; //最优路径 7 private int cLength = 0; //当前已经加入的点的长度 8 private static int allLength = Integer.MAX_VALUE; //总长 9 private int weight[][] ={ {0,2,8,5,1,8}, 10 {3,0,1,8,5,2}, 11 {6,2,0,3,6,1}, 12 {88,3,6,0,6,4}, 13 {7,2,6,1,0,5}, 14 {6,3,9,1,4,0}}; 15 16 public static void main(String[] args) { 17 Main tsp = new Main(); 18 tsp.getTSP(index); 19 System.out.println(allLength); 20 for (int i = 0; i < N; i++) { 21 System.out.print(bestX[i]+" "); 22 } 23 } 24 private boolean ifExist(int index){ //判断index这个位置上是否可以放x[index] 这个点 25 int i=0; //已经加入的位置 x[i]才是该位置的点 26 while(i<index){ 27 if(x[i]==x[index]){ //判断当前位置的点是否已经出现了 28 return false; 29 } 30 i++; 31 } 32 return true; 33 } 34 35 private void getTSP(int index){ 36 if(index==N-1){ 37 for(int j=1;j<=N;j++) { 38 x[index] = Math.floorMod(x[index] + 1, N); //通过取余弄出一个当前位置的点 39 if (ifExist(index) && cLength + weight[x[index - 1]][x[index]] + weight[x[index]][x[0]]< allLength) { //总长= 已加入长度+ 到该点+该点到初始 40 allLength = cLength + weight[x[index - 1]][x[index]]+weight[x[index]][x[0]]; 41 for (int i = 0; i < N; i++) { 42 bestX[i] = x[i]; 43 } 44 } 45 } 46 }else { 47 for (int j = 1; j <= N; j++) { 48 x[index] = Math.floorMod(x[index] + 1, N); //给定当前这个位置的点的值 49 if (ifExist(index) && cLength + weight[x[index - 1]][x[index]] < allLength) { 50 cLength += weight[x[index - 1]][x[index]]; 51 getTSP(index + 1); 52 cLength -= weight[x[index - 1]][x[index]]; 53 } 54 } 55 } 56 } 57 58 }
这是结果:
转载于:https://www.cnblogs.com/12344321hh/p/9617428.html
货郎担问题(TSP问题)相关推荐
- 货郎担问题TSP(dp解法)
货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一. 题目背景 有n个城市,用1,2,-,n表示,城i,j之间的距离为dij,有一 ...
- 货郎担问题(TSP)
有n个城市,用0,1,-,n-1表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短? 不妨设0为起点和终点, d(i, s)为从 ...
- 微信聊天记录备份:当前网络状况复杂和连接失败的解决办法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 本文链接(文末链接可直达原文): https://blog.csdn.net/qq_41811874/article/detai ...
- TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次,并要求所走的路径最短。该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中广为人知的问题
不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 1.问题描述 所谓TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次,并要求所 ...
- java货郎担问题求解_货郎担问题(TSP)
n个城市,两两之间均有道路连接,长度已知.先有一人从某一城市出发,所有城市经过一次且只能经过一次.求最小的总路程. DP方程:设起点为城市0(最终路径是个环,起点在哪都不影响),设D[i][S]为当前 ...
- 【一】TSP、VRP、VRP模型介绍
一. TSP问题数学模型 编辑 TSP,即Traveling Salesman Problem,也就是旅行商问题,又译为旅行推销员问题.货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求 ...
- 旅行商问题(Traveling Saleman Problem,TSP)
什么是旅行商问题 旅行商问题(Traveling Saleman Problem,TSP)是VRP的特例,由于Gaery[1]已证明TSP问题是NP难题,因此,VRP也属于NP难题. 旅行商问题(TS ...
- matlab做TSP,基于matlab TSP问题遗传算法的实现
%TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序 %D是距离矩阵,n为种群个数,建议取为城市个数的1~2倍, %C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模 ...
- 遗传算法(Genetic Algorithm )+C++实现解决TSP问题
概念 项目所在github https://github.com/Sean16SYSU/Algorithms4N 生物进化中的概念 遗传算法中的作用 环境 适应函数 适应性 适应函数值 适者生存 适应 ...
最新文章
- Linux多线程管理: 多线程编程
- JavaScriptSerializer序列化和反序列化JSON:使用自定义JavaScriptConverter
- OpenUPF 是释放 5G 潜力的金钥匙
- 2021暑假每日一题 【week6 完结】
- 河北职称计算机2012试题,2012年河北省职称计算机考试试题及答案.doc
- BZOJ 2733: [HNOI2012]永无乡 [splay启发式合并]
- Full_of_Boys训练1总结
- python模拟登录淘宝直通车_Python实现的淘宝直通车数据抓取(1)
- java 中 class 对象_java中Class对象详解
- 英语阅读计算机病毒是指,阅读计算机病毒大战的答案
- 客户端js 读取 json 数据
- 神舟战神调节风扇热键_神舟HASEE笔记本电脑开机进入BIOS的方法与bios设置图解(F2)...
- linux查看磁盘内存cpu
- Misra c规则简介
- OverFeat,分类、定位、检测
- 大数据scala面试题汇总
- Java Poi 根据文字内容 插入 word 图片
- 搜索留痕软件_这款原价905台币的专业软件,请收好
- 产业智能化的大江大河,需要AI安全这样守护
- 计组作业【题目记录】
热门文章
- 质量、质量要求、检验、验证和确认
- 01 PhantomReference没有进入ReferenceQueue
- Java打印流——PrintStream
- 读书笔记_《统计陷阱》达莱尔.哈夫
- 高性能平台设计——美团旅行结算平台实践
- jquery开关灯案例_jQuery实现开关灯效果
- 【面试题】一个Http请求的流程
- 有服务器端源码和客户端源码,C# 远程控制软件源码(含服务器端和客户端源码)...
- 怎样有效的检索文献?
- 分析oracle缓慢原因,Oracle SQL执行缓慢的原因分析