问题陈述:
设G(V,E)是一带权有向图,V={1,2,…n }, 其耗费矩阵C=(ci,j)当(i, j) E时,记 ci,j= 且 ci,i= .问如何选择周游路线使耗费最小。
算法思路:
在本文中使用了图G的归约矩阵。如果矩阵的一行(列)至少包含一个零元素且其余元素均为非负,则此行(列)称为已归约行(列)。所有行和列均为已归约和列的矩阵成为归约矩阵。
可以通过对一行(列)中每个元素都减去同一个常数t(称为约数)将该行(列)变成已归约行(列)。逐行逐列归约就可以得到原矩阵的归约矩阵。
设A是结点R的归约成本矩阵,S是R的儿子且树边<R,S>对应的这条周游路线中的边<i,j>。
在S是非叶子结点的情况下,它的归约矩阵成本矩阵可以按照下面的步骤求得:
1.为了保证这条边周游路线采用边<i,j>而不采用其他由i出发或进入的j边,将A中i行j列的元素置为无穷
2.为了防止采用边<i,0>(因为在已选定的路线上加入边<i,j>之后若采用边<i,0>就会构成一个环,从而得不到这条周游路线),将A(j,0)置为无穷
3.对于那些不全为无穷的行和列施行归约,则得到S的归约成本矩阵,令其为B,矩阵的约数为r。
from queue import Queue
import copy
import heapq
global MAXNUM
class Node:
def __init__