货郎担问题也叫旅行商问题,即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问题)相关推荐

  1. 货郎担问题TSP(dp解法)

    货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一. 题目背景 有n个城市,用1,2,-,n表示,城i,j之间的距离为dij,有一 ...

  2. 货郎担问题(TSP)

    有n个城市,用0,1,-,n-1表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短? 不妨设0为起点和终点, d(i, s)为从 ...

  3. 微信聊天记录备份:当前网络状况复杂和连接失败的解决办法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 本文链接(文末链接可直达原文): https://blog.csdn.net/qq_41811874/article/detai ...

  4. TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次,并要求所走的路径最短。该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中广为人知的问题

    不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 1.问题描述 所谓TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次,并要求所 ...

  5. java货郎担问题求解_货郎担问题(TSP)

    n个城市,两两之间均有道路连接,长度已知.先有一人从某一城市出发,所有城市经过一次且只能经过一次.求最小的总路程. DP方程:设起点为城市0(最终路径是个环,起点在哪都不影响),设D[i][S]为当前 ...

  6. 【一】TSP、VRP、VRP模型介绍

    一. TSP问题数学模型 编辑 TSP,即Traveling Salesman Problem,也就是旅行商问题,又译为旅行推销员问题.货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求 ...

  7. 旅行商问题(Traveling Saleman Problem,TSP)

    什么是旅行商问题 旅行商问题(Traveling Saleman Problem,TSP)是VRP的特例,由于Gaery[1]已证明TSP问题是NP难题,因此,VRP也属于NP难题. 旅行商问题(TS ...

  8. matlab做TSP,基于matlab TSP问题遗传算法的实现

    %TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序 %D是距离矩阵,n为种群个数,建议取为城市个数的1~2倍, %C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模 ...

  9. 遗传算法(Genetic Algorithm )+C++实现解决TSP问题

    概念 项目所在github https://github.com/Sean16SYSU/Algorithms4N 生物进化中的概念 遗传算法中的作用 环境 适应函数 适应性 适应函数值 适者生存 适应 ...

最新文章

  1. Linux多线程管理: 多线程编程
  2. JavaScriptSerializer序列化和反序列化JSON:使用自定义JavaScriptConverter
  3. OpenUPF 是释放 5G 潜力的金钥匙
  4. 2021暑假每日一题 【week6 完结】
  5. 河北职称计算机2012试题,2012年河北省职称计算机考试试题及答案.doc
  6. BZOJ 2733: [HNOI2012]永无乡 [splay启发式合并]
  7. Full_of_Boys训练1总结
  8. python模拟登录淘宝直通车_Python实现的淘宝直通车数据抓取(1)
  9. java 中 class 对象_java中Class对象详解
  10. 英语阅读计算机病毒是指,阅读计算机病毒大战的答案
  11. 客户端js 读取 json 数据
  12. 神舟战神调节风扇热键_神舟HASEE笔记本电脑开机进入BIOS的方法与bios设置图解(F2)...
  13. linux查看磁盘内存cpu
  14. Misra c规则简介
  15. OverFeat,分类、定位、检测
  16. 大数据scala面试题汇总
  17. Java Poi 根据文字内容 插入 word 图片
  18. 搜索留痕软件_这款原价905台币的专业软件,请收好
  19. 产业智能化的大江大河,需要AI安全这样守护
  20. 计组作业【题目记录】

热门文章

  1. 质量、质量要求、检验、验证和确认
  2. 01 PhantomReference没有进入ReferenceQueue
  3. Java打印流——PrintStream
  4. 读书笔记_《统计陷阱》达莱尔.哈夫
  5. 高性能平台设计——美团旅行结算平台实践
  6. jquery开关灯案例_jQuery实现开关灯效果
  7. 【面试题】一个Http请求的流程
  8. 有服务器端源码和客户端源码,C# 远程控制软件源码(含服务器端和客户端源码)...
  9. 怎样有效的检索文献?
  10. 分析oracle缓慢原因,Oracle SQL执行缓慢的原因分析