def backtrack(t):
global n, a, x, bestl, NoEdge, cl, bestx
# 当t等于n时,表示已经访问了所有城市
if t == n:
# 检查当前路径是否有效(没有无连接的边,并且回到起点的路径长度小于当前最优解或当前最优解未设置)
if (a[x[n-1]][x[n]] != NoEdge and a[x[n]][1] != NoEdge and
(cl + a[x[n-1]][x[n]] + a[x[n]][1] < bestl or bestl == NoEdge)):
bestx = x[:] # 更新最优路径
bestl = cl + a[x[n-1]][x[n]] + a[x[n]][1] # 更新最优路径长度
else:
# 尝试所有可能的城市作为下一个访问的城市
for j in range(t, n+1):
# 如果从当前城市到j城市的边存在,并且当前路径长度小于最优解或最优解未设置
if (a[x[t-1]][x[j]] != NoEdge and
(cl + a[x[t-1]][x[j]] < bestl or bestl == NoEdge)):
# 交换当前城市t和j城市的位置
x[t], x[j] = x[j], x[t]
# 更新当前路径长度
cl &
12-01
1138
