实验名称
实验十一 贪心算法解决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)