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

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

1、问题描述

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

2、基本要求

(1)上网查找TSP问题的应用实例

(2)分析求TSP问题的全局最优解的时间复杂度

(3)设计一个球近似解的算法

(4)分析算法的时间复杂度

3、实现思想

利用贪心算法,从第一个节点遍历,不断寻找当时阶段的最优解,以达到最后所需的最优解

以下代码仅供参考

以下代码仅供参考

以下代码仅供参考

/**
 *作者:魏宝航
 *2020年11月22日,下午21:09
 */
import java.io.IOException;
import java.util.Scanner;
public class MatrixUDG {
    private char[] mVexs;       
    private int[][] mMatrix;    
    private int num;
    private int edge;
    public MatrixUDG(char[] vexs, char[][] edges) {
        num = vexs.length;
        edge = edges.length;
        mVexs = new char[num];
        for (int i = 0; i < mVexs.length; i++)
            mVexs[i] = vexs[i];
        mMatrix = new int[num][num];
        for(int i=0;i<num;i++){
            for(int j=0;j<num;j++){
            }
        }
        for(int i=0;i<edge;i++){
            for(int j=0;j<edge;j++){
                if(i==j){
                    mMatrix[i][j]=Integer.MAX_VALUE;
                }
                else{
                    mMatrix[i][j] = Integer.parseInt(edges[i][j] + "");
                }
            }
        }
    }
    public void print() {
        System.out.printf("Martix Graph:\n");
        for (int i = 0; i < mVexs.length; i++) {
            for (int j = 0; j < mVexs.length; j++){
                if(mMatrix[i][j]<Integer.MAX_VALUE){
                    System.out.printf("%d ", mMatrix[i][j]);
                }else{
                    System.out.print("∞ ");
                }
            }
            System.out.printf("\n");
        }
    }
    public int TSP(){
        int sum=0;
        boolean[] visit=new boolean[num];
        int min=Integer.MAX_VALUE;
        int now=0;
        int index=0;
        visit[0]=true;
        System.out.print(now+1);
        for(int k=0;k<num-1;k++){
            for(int i=0;i<mMatrix.length;i++){
                if(mMatrix[now][i]<=min&&visit[i]==false){
                    min=mMatrix[now][i];
                    index=i;
                }
            }
            visit[index]=true;
            sum+=min;
            now=index;
            min=Integer.MAX_VALUE;
            System.out.print("->"+(now+1));
        }
        sum+=mMatrix[now][0];
        System.out.print("->"+1);
        return sum;
    }
    public static void main(String[] args) {
        char[] vexs2={'1','2','3','4','5'};
        char[][] edges2=new char[][]{
                {'∞','3','3','2','6'},
                {'3','∞','7','3','2'},
                {'3','7','∞','2','5'},
                {'2','3','2','∞','3'},
                {'6','2','5','3','∞'},
        };
        MatrixUDG pG=new MatrixUDG(vexs2,edges2);
        pG.print();
        int sum=pG.TSP();
        System.out.println();
        System.out.println("最短路径为:"+sum);
    }
}


目录
相关文章
|
2月前
|
存储 前端开发 算法
太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
该文章深入探讨了图数据结构的基本概念及其在前端领域的多种应用,包括图的不同表示方法(邻接矩阵与邻接表)和经典的图算法(如深度优先搜索与广度优先搜索),并通过具体实例讲解了如何使用JavaScript来解决图相关的编程问题,如太平洋大西洋水流问题。
太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
|
2月前
|
人工智能 算法 大数据
科技云报到:以数据“价值三角”为擎,探索数据治理实践路径
过去四十年,经济发展主要依靠土地、劳动力和传统技术。如今,数据成为继土地、劳动、资本和技术后的新型生产要素,推动数字经济时代的融合创新。然而,数据共享受限于标准缺失、系统壁垒和安全问题,亟需数据治理以激活其价值。国家数据局等17部门发布《“数据要素×”三年行动计划》,旨在2026年前拓展数据应用并打造示范场景。蚂蚁数科推出的DataFab平台和新一代AI数据标注产品,助力企业高效管理数据资产,提升标注效率,推动数据要素市场的全面发展。数据作为新型生产要素,在云计算和人工智能的驱动下,正加速变革生产生活、经济发展和社会治理方式。
|
6月前
数据代码分享|R语言回归分析:体脂数据、公交绿色出行与全球变暖2案例
数据代码分享|R语言回归分析:体脂数据、公交绿色出行与全球变暖2案例
|
机器学习/深度学习 传感器 算法
基于模拟退火算法无人机药品配送路线规划(条件:距离近优先)附Matlab代码
基于模拟退火算法无人机药品配送路线规划(条件:距离近优先)附Matlab代码
《城市绿色出行指数白皮书》——附录A :名词解释
《城市绿色出行指数白皮书》——附录A :名词解释
数车常用的三种退刀路线讲解
数车常用的三种退刀路线讲解
数车常用的三种退刀路线讲解
|
算法 C++
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
蓝桥杯试题 算法训练 绘制地图 C/C++解法 AC(最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情。。。。)
109 0
7-14 修建道路 (10 分)
7-14 修建道路 (10 分)
138 0
|
数据挖掘
中国餐馆过程(CRP)
  查如何事先确定聚类簇数目发现的,是对狄利克雷过程的(DP)的一种解释。   假设一个中国餐馆有无限的桌子,第一个顾客到来之后坐在第一张桌子上。第二个顾客来到可以选择坐在第一张桌子上,也可以选择坐在一张新的桌子上,假设第n+1个顾客到来的时候,已经有k张桌子上有顾客了,分别坐了n1,n2,...,nk个顾客,那么第n+1个顾客可以以概率为ni/(\alpha+n)坐在第i张桌子上,ni为第i张桌子上的顾客数;同时有概率为\alpha/(\alpha+n)选取一张新的桌子坐下。
1221 0