深度优先搜索解决TSP问题(Python)实现
旅行商( TSP )问题是在寻求单一旅行者由起点出发,通过所有给定的顶点之后,最后再回到原点的最小路径成本。
题目描述
【问题描述】采用深度优先搜索算法求解TSP问题,并在搜索过程中,使用界限条件(当前结点已经走过的路径长度要小于已求得的最短路径)进行“剪枝”操作(不再对后续结点进行遍历),从而提高搜索效率。采用queue模块中的栈(LifoQueue)来实现深度优先搜索。
【输入形式】在屏幕上输入顶点个数和连接顶点间的边的邻接矩阵,边上的权可能有小数点。
【输出形式】在整个算法过程中的先后搜索路径(最多输出20次最先搜索的路径),最优值和其中一条最优路径。
【样例1输入】
4
0 30 6 4
30 0 5 10
6 5 0 20
4 10 20 0
【样例1输出】
1
1->2
1->2->3
1->2->3->4
1->2->4
1->3
1->3->2
1->3->2->4
1->3->4
1->4
1->4->2
1->4->2->3
1->4->3
25: 1->3->2->4
【样例说明】
输入:顶点个数为4。连接顶点间边的邻接矩阵大小为4行4列,位置[i,j]上元素值表示第i个顶点到第j个顶点的距离,0表示两个顶点间没有边连接。
输出:在整个算法过程中的先后搜索路径,最优值为25,最优路径为:1->3->2->4。
import numpy as np
import queue
def delete_extra_zero(n):
#去掉n末尾多余的零,由于输入类型全设置为double所以不用判断是否整数
n = str(n).rstrip('0')
#如果n的末尾为.则去掉,如果不是则类型转换为double
n = int(n.rstrip('.')) if n.endswith('.') else np.double(n)
return n
class vertex(object