距离矩阵FLoyd-Warshall Python

距离矩阵FLoyd-Warshall Python,python,matrix,floyd-warshall,Python,Matrix,Floyd Warshall,要为Floyd Warshall算法“最短路径”()生成距离矩阵,需要将一些道路作为顶点,并将这些道路之间的距离作为边。例如(出发、目的地、距离):道路=[[“费城”、“纽约市”,120],“纽约市”、“费城”,97],“米尔伯恩”,“纽约市”,25],“莫里斯敦”,“哈里斯堡”,150] 如何用python生成此矩阵 结构如下: network[0] = #list destinations for i in range (len(roads)): network [i][0] =

要为Floyd Warshall算法“最短路径”()生成距离矩阵,需要将一些道路作为顶点,并将这些道路之间的距离作为边。例如(出发、目的地、距离):
道路=[[“费城”、“纽约市”,120],“纽约市”、“费城”,97],“米尔伯恩”,“纽约市”,25],“莫里斯敦”,“哈里斯堡”,150]
如何用python生成此矩阵

结构如下:

network[0] = #list destinations
for i in range (len(roads)):
      network [i][0] = #list departures
我不知道如何在正确的位置填充距离,因为当一个目的地或出发地被多次使用时,
网络[roads[I][0],[roads[I][1]
不是正确的解决方案


谢谢!

如果你正在寻找快速查找,你可以考虑<代码> DICT<代码>,而不是列表(具有额外空间的折衷)

(注意插入反向边和值)

您可以使用
defaultdict
从给定的数组创建一个类似上面的字典

from collections import defaultdict
roads = [["Philadelphia", "New York City", 120 ], ["New York City", "Philadelphia", 97 ],[ "Millburn", "New York", 25 ],["Morristown", "Harrisburg", 150]]
d = defaultdict(lambda : defaultdict(lambda:0))
for source,dest,distance in roads:
    d[source][dest] = distance
如果正在使用,则可以将上述词典转换为数据帧

import pandas
dist = pandas.DataFrame.from_dict(distance)
print dist
#               Millburn  Morristown  New York City  Philadelphia
#Harrisburg          NaN         150            NaN           NaN
#New York             25         NaN            NaN           NaN
#New York City       NaN         NaN            NaN           120
#Philadelphia        NaN         NaN             97           NaN
dist['Philadelphia']['New York City']
# 120.0

如果你有N个城市,你需要N×N的矩阵

首先,你必须将城市映射到数字

'Millburn' : 0
'Morristown': 1
...
计算城市数量-N,并使维数为nxn的矩阵为空。现在将矩阵(i,j)的每个条目设置为城市i和j之间的距离。如果不存在直接连接,则将值设置为无穷大


一旦你有了那个矩阵,就在上面运行FLoyd Warshall算法。

恐怕我不能使用pandas…这就是为什么我认为使用字典更复杂的原因,因为字典是无序的,你不能按索引选择元素。这很重要,因为我不能使用例如“距离[Millburn]",我必须构造一个通用矩阵,它适用于每个给定的roads元组。@Materials,我已经编辑了答案,以说明我是如何根据您提供的数组创建字典的。因此,构造通用矩阵不是问题。请详细说明是否需要使用整数索引而不是字符串索引;因为这将是trivi如果您可以编辑问题,并提供有关如何使用数据结构的信息,那么有人可以帮助您创建该数据结构
'Millburn' : 0
'Morristown': 1
...