我正使用csgraph
scipy.sparse
模块计算加权图表中的所有最短路径
我有一个N * N的矩阵(InputMatrix
),我正在使用以下函数:
DijstraMatrix, DijkstraPredecessors=sp.sparse.csgraph.shortest_path(InputMatrix, method="D", return_predecessors=True)
我认为由于效率原因,每个节点的前驱列表不会返回显式路径。然后可以从DijkstraPredecessors
列表重建任意两个节点i和j之间的最短路径。
我的问题是我需要最短路径来最大化访问节点的数量。如果我为一个大矩阵实现重建,则需要永远计算所有重建路径。
该函数以某种方式在内部计算该信息..是否有任何方法可以获得N * N矩阵,其中包含在i和j之间的最短路径中访问了多少个节点的信息?这是一种有效的计算方法吗?
这是我编码的那个:
def SinglePath(DijkstraPredecesors, i, j):
length=0
k=j
while (i != k) & (k >= 0):
length+=1
k = DijkstraPredecesors[i,k]
return (length)
def calculate_bi_longerpath(Distancias, DijkstraPredecesors):
node1=-1
node2=-1
n_nodes=0
distance=-1
for i in range(0, Distancias.shape[0]):
print(i)
for j in range(0, Distancias.shape[1]):
if(i<j):
path=SinglePath(DijkstraPredecesors, i, j)
if(path>n_nodes):
node1=i
node2=j
distance=Distancias[i][j]
n_nodes=path
return(node1, node2, distance, n_nodes)
print("Longest larger path...")
node1, node2, n_nodes, distance=calculate_bi_longerpath(DijkstraMatrix, DijkstraPredecesors)
print(node1, node2, n_nodes, distance)