【问题标题】:how to find shortest path between all the cities with starting and end points如何找到具有起点和终点的所有城市之间的最短路径
【发布时间】:2018-05-06 07:42:47
【问题描述】:

我有一个这样的数据框,

 From City      City A  City B City C  City D
 City A                 2166    577     175
 City B         2166            1806    2092
 City C         577     1806            653
 City D         175     2092    653 

我使用tsp-solver 找到了最短路径顺序,但我想使用起点和终点 找到最短路径顺序。请帮忙

预期输出:

如果我选择,城市B是我的起点, 它应该返回一个从城市 B 开始的城市列表,并通过最短路径的所有城市进行路由

【问题讨论】:

  • 你能添加更多细节吗?输出应该如何?
  • 我编辑了问题
  • 对于 A 应该是:'[City D, City C, City B]'?

标签: pandas networkx shortest-path


【解决方案1】:

我不知道我是否正确理解了这个问题,但是如果你想要一个从所选城市中路径最短的城市的有序列表,你可以这样做:

df = pd.DataFrame({"From city": ['A', 'B', 'C', 'D'], 'A':[np.NaN,2166,577,175], 'B':[2166,np.NaN,1806,2092], 'C':[577,1806,np.NaN,653], 'D':[175,2092,653,np.NaN]})
df.set_index('From city', inplace=True)
print df
                A       B       C       D
From city                                
A             NaN  2166.0   577.0   175.0
B          2166.0     NaN  1806.0  2092.0
C           577.0  1806.0     NaN   653.0
D           175.0  2092.0   653.0     NaN

dic = df.to_dict(orient='records')
city=dic[3]
from math import isnan
city = {k: city[k] for k in city if not isnan(city[k])}
city_order = sorted(city.items(), key=lambda x:x[1])
city_list = [i[0] for i in city_order]

解释:

从 df 制作字典:

dic = df.to_dict(orient='records')

选择你的城市(对于城市'D'->3)

city=dic[3]

移除 NaN 元素

from math import isnan
city = {k: city[k] for k in city if not isnan(city[k])}

订购

city_order = sorted(city.items(), key=lambda x:x[1])

只选择城市:

city_list = [i[0] for i in city_order]
print city_list

输出:

['A', 'C', 'B']

【讨论】:

  • 乔,感谢您的解决方案,实际上我发布了一个问题,但我无法实现起始和结束位置,这就是我发布此解决方案的原因。请检查我的第一个问题以获得更好的理解。 stackoverflow.com/questions/50196539/…
  • 你看到我之前的问题了吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2018-03-20
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2016-03-26
相关资源
最近更新 更多