实验十一 贪心算法解决TSP问题

实验名称

实验十一 贪心算法解决TSP问题

实验目的

(1)掌握贪心法的设计思想;
(2)掌握TSP问题的具体实现过程;
(3)熟练掌握二维数组的使用方法;
(4)在掌握的基础上编程实现TSP问题的具体实现过程。

实验题目

给出n个城市及任意两城市间的距离,要求旅行家在旅行者n个城市时,各个城市经历且仅经历一次然后回到出发城市,使得所走的路径最短。输出结果,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。

实验源代码

public class get {
	public static void TSP(int[][] arc, int w, int n)
    {
    	int edgeCount=0, TSPLength=0;
    	int min, u, v = 0;
    	int[] flag = new int[n];
    	for(int i=0; i<n; i++) {
    		flag[i]=0;
    	}
    	u=w; flag[w]=1;
    	while(edgeCount<n-1){
    		min=100;
    		for(int j=0; j<n; j++){
    			if((flag[j]==0)&&(arc[u][j]!=0)&&(arc[u][j]<min)){
    				v=j; min=arc[u][j];
    			}
    		}
    		TSPLength+=arc[u][v];
    		flag[v]=1; edgeCount++;
    		System.out.print(u+"-->"+v+"\n");
    		u=v;
    	}
    	System.out.print(v+"-->"+w+"\n");
    	int sum = TSPLength+arc[u][w];
    	System.out.print("最短回路长度为:"+sum+"\n"); 
     } 
}

import java.util.Scanner;

public class TSP {
    /**
     * @param args
     */
    public static void main(String[] args) {
    	System.out.print("请输入城市的个数:");
    	Scanner sc = new Scanner(System.in);
    	int n = sc.nextInt();
    	System.out.print("请输入出发的城市:");
    	int w = sc.nextInt();
    	int[][] c = new int[n][n];
    	for(int i=0; i<n; i++) {
    		for(int j=0; j<n; j++) {
    			c[i][j] = sc.nextInt();
    		}
    	}
         /*int[][] c={ 
                    {0,3,6,7}, 
                    {5,0,2,3}, 
                    {6,4,0,2}, 
                    {3,7,5,0} 
                }; */
    	get.TSP(c, w, n);
    }
}

实验结果(给出题目的运行结果(插入运行结果截图))

在这里插入图片描述

时间复杂度为O(n^2)

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写bug如流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值