我有一个平衡的树,分支因子2和高度100,每个边都有一个由文本文件给出的权重,如下所示:
73 41
52 40 09
26 53 06 34
etc etc until row nr 99
即:从节点0到1的边缘权重是73,从0到2是41,从1到3是52,等等.
我希望找到从树的根到末尾的最短路径(具有相应的边权重和).据我所知,这可以通过将所有边权重乘以-1并使用Networkx中的Dijkstra算法来完成.
>算法选择是否正确?
>如何“轻松”将此数据集导入Networkx图形对象?
(PS:这是项目Euler Problem 67,找到数字三角形的最大总和.我已经通过memoization递归解决了问题,但我想尝试用Networkx包解决它.)
解决方法:
Is the algorithm choice correct?
是.您可以使用正权重,并调用nx.dijkstra_predecessor_and_distance以获取从根节点0开始的最短路径.
How do I “easily” import this data set into a Networkx graph object?
import networkx as nx
import matplotlib.pyplot as plt
def flatline(iterable):
for line in iterable:
for val in line.split():
yield float(val)
with open(filename, 'r') as f:
G = nx.balanced_tree(r = 2, h = 100, create_using = nx.DiGraph())
for (a, b), val in zip(G.edges(), flatline(f)):
G[a][b]['weight'] = val
# print(G.edges(data = True))
pred, distance = nx.dijkstra_predecessor_and_distance(G, 0)
# Find leaf whose distance from `0` is smallest
min_dist, leaf = min((distance[node], node)
for node, degree in G.out_degree_iter()
if degree == 0)
nx.draw(G)
plt.show()
标签:python,networkx 来源: https://codeday.me/bug/20190613/1231057.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。