分支界限法 旅行商问题

这篇博客详细介绍了如何运用分支界限法解决旅行商问题。旅行商问题旨在找到访问所有城市一次并返回起始城市的最短路径。博主首先描述了问题背景,然后讲解了程序的使用(基于Java 1.8.0_111,IDE为Eclipse),接着分析了问题的简要设计,包括将问题抽象为图,并展示了空间树的概念。博主还提供了测试用例和源代码,展示如何实现分支界限法求解旅行商问题的最优路径。
摘要由CSDN通过智能技术生成

2.6.1题目描述

给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路

2.6.2程序使用说明

Java version:1.8.0_111

IDE:eclipse

eclipse右键 run,在控制台查看结果

2.6.3简要分析和设计

旅行商问题使用分支界限法求解。将问题抽象成图的问题。城市作为图的一个点,城市与城市之间的通路和距离作为图的连通线段和权重。举例说明,如果存在如下的图。

 

图四  图(来源于算法设计与分析基础第三版)

用分支界限法解上面图的最短路径,则需要解决一个最小下界的问题,这里用如下公式来计算下界。

 

公式四(来源于算法设计与分析基础第三版)

此处举例说明S,当一条路径都未确定时,上面图四中S=(1+3+3+6+1+2+3+5+2+3)

当假设边a e确定后,S=(1+8+3+6+1+2+4+6+2+8),对于此题可以确定先经过b再经过c,通过以上分析可以可以得到上面例子的空间树。如图5

 

5 旅行商空间树(来源于算法设计与分析基础第三版)

可以通过程序实现分支界限法

2.6.4测试用例

测试用例一:

权重矩阵:{ {0,3,1,5,8},{3,0,6,7,9},

{1,6,0,4,2},{5,7,4,0,3},

{8,9,2,3,0}}

点:{ 'a','b','c','d','e'}

 

结果:

路径长度:16

路径经过顺序:a b d e c a

 

2.6.5源代码

目录结构:

 

package three.three;

 

import java.util.ArrayList;

import java.util.Comparator;

import java.util.HashMap;

import java.util.Map;

import java.util.PriorityQueue;

/**

 * 求最短路径

 * @author ym

 *

 */

public class ShortestPath {

//记录路径

int[][] path=null;

HashMap<Character,Integer> chIntMap = null;

//记录状态列点表

PriorityQueue<Node> nodeQueue = null;

//构造比较函数

Comparator<Node>  comparator = new Comparator<Node>() {

public int compare(Node o1, Node o2) {

return o1.getLb()-o2.getLb();

};

};

public ShortestPath(int[][] path,HashMap<Character,Integer> chIntMap){

this.path=path;

this.chIntMap = chIntMap;

this.nodeQueue = new PriorityQueue<Node&g

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值