【Python学习系列二十六】networkx库图最短路径求解
来源:互联网 发布:手机象棋打谱软件 编辑:程序博客网 时间:2024/05/21 10:14
场景:基于python库networkx来求解图最短路径,相关算法基础参考
http://blog.csdn.net/fjssharpsword/article/details/52931373
http://blog.csdn.net/fjssharpsword/article/details/52953640
可看networkx源码了解其内部算法用的原理。
代码:
# -*- coding: utf-8 -*-import networkx as nximport matplotlib.pyplot as plt#读取文件,获取节点和边f = open("D:\\tmp\\gy_contest_link_top.txt", "r") nodelist=[]edgelist=[]while True: line = f.readline() if line: pass # do something here line=line.strip() node=line.split(';')[0]#获取图节点 nodelist.append(node) in_nodes=line.split(';')[1].split('#')#获取图边,该节点是终点 for ins in range( len(in_nodes) ) : if in_nodes[ins].strip() !='': in_edge=(in_nodes[ins],node) if in_edge not in edgelist: edgelist.append(in_edge) out_nodes=line.split(';')[2].split('#')#获取图边,该节点是起点 for ins in range( len(out_nodes) ) : if out_nodes[ins].strip() !='': out_edge=(node,out_nodes[ins]) if out_edge not in edgelist: edgelist.append(out_edge) else: breakf.close()del nodelist[0] #删除表头生成的节点del edgelist[0]del edgelist[0] #删除表头生成的边#print len(nodelist) #图节点#print len(edgelist) #边数#有向图构建G=nx.DiGraph()G.add_nodes_from(nodelist)G.add_edges_from(edgelist)#任意两点间最短路径'''try: n=nx.shortest_path_length(G,1,4) print nexcept nx.NetworkXNoPath: print 'No path''''path=nx.all_pairs_shortest_path(G)#for item in path.items():# print itemprint path.popitem()#强联通和弱联通for c in nx.weakly_connected_components(G):#弱联通 print c con = nx.strongly_connected_components(G)#强联通print conprint type(con)print list(con)#有向图绘制nx.draw_networkx(G, pos=None, arrows=True, with_labels=False)#with_labels=False不带节点名#plt.savefig('D:\\tmp\\it.png')plt.show()
阅读全文
0 0
- 【Python学习系列二十六】networkx库图最短路径求解
- python networkx学习
- python networkx学习
- 最短路径(Python)networkx 包
- python 学习笔记(二十六)
- python中networkx包学习——最短路径函数shortest_path及shorest_path_length
- python包NetworkX学习——最短路径dijkstra_path和dijkstra_path_length
- 【Python】python 学习笔记 --画图(networkx)
- python第三方库系列之二十六--virtualenv库
- python学习笔记(2)--Networkx画图
- Python学习4-NetworkX的使用
- python 学习笔记2 --画图(networkx)
- Vuejs学习系列(十六)--模板语法(二)
- networkx学习
- Python的学习(二十六)---- 压缩与解压缩文件
- 26. Python脚本学习笔记二十六 mod_python
- Python学习系列之二
- 学习Python(十六)
- HDU1029
- iOS之自动检测项目中的无用的图片资源
- LCS最长公共子序列
- flask route 方法不能使用 test
- Win用戶配置 gitconfig 步驟及注意事項
- 【Python学习系列二十六】networkx库图最短路径求解
- hdu 5285 二分图+染色
- mysql报错Error 1045(28000): Access denied for user ‘root’@’localhost’
- POJ
- C语言编程实战——编写简单贪吃蛇程序
- fish
- require.js在angular中的应用
- - 不容易系列之一
- 十一知识总结