【问题描述】采用优先队列搜索算法求解TSP问题,用一最小堆来存储活结点表,其优先级是结点的当前费用。并在搜索过程中,使用界限条件(当前结点已经走过的路径长度要小于已求得的最短路径)进行“剪枝”操作(不再对后续结点进行遍历),从而提高搜索效率。采用heapq模块来实现最小堆。
【输入形式】在屏幕上输入顶点个数和连接顶点间的边的邻接矩阵。
【输出形式】搜索过程,最优值和其中一条最优路径。
【样例输入】
4
0 30 6 4
30 0 5 10
6 5 0 20
4 10 20 0
【样例输出】
[1]
[1, 4]
[1, 3]
[1, 3, 2]
[1, 4, 2]
[1, 4, 2, 3]
[1, 3, 2, 4]
[1, 4, 3]
[1, 3, 4]
[1, 2]
25: [1, 4, 2, 3]
【样例说明】
输入:顶点个数为4。连接顶点间边的邻接矩阵大小为4行4列,位置[i,j]上元素值表示第i个顶点到第j个顶点的距离,0表示两个顶点间没有边连接。
输出:在整个算法过程中的先后搜索路径,最优值为25,最优路径为[1, 3, 2, 4]。
【评分标准】根据输入得到准确的输出。
import numpy as np
import heapq
class VertexNode(object): # 顶点类
def __init__(self, path=None, cost=None):
self.path = path # 到当前结点为止已经走过的路径
self.cost