场景:基于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 nx

import 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:

break

f.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 n

except nx.NetworkXNoPath:

print 'No path'

'''

path=nx.all_pairs_shortest_path(G)

#for item in path.items():

# print item

print path.popitem()

#强联通和弱联通

for c in nx.weakly_connected_components(G):#弱联通

print c

con = nx.strongly_connected_components(G)#强联通

print con

print 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()

python networkx进行最短路径分析_【Python学习系列二十六】networkx库图最短路径求解...相关推荐

  1. 【Python学习系列二十六】networkx库图最短路径求解

    场景:基于python库networkx来求解图最短路径,相关算法基础参考 http://blog.csdn.net/fjssharpsword/article/details/52931373 ht ...

  2. 【Python学习系列二十】scikit-learn库模型持久化

    场景:需要将模型保存到内存,或磁盘. 代码: # -*- coding: utf-8 -*-import pandas as pd import pickle as pkl from sklearn. ...

  3. JavaScript学习(二十六)—事件处理程序的添加与删除

    JavaScript学习(二十六)-事件处理程序的添加与删除 一.什么是事件? 所谓事件就是指用户或页面自身的某些行为,如点击鼠标,敲击键盘都是属于事件. 二.事件处理程序 当事件被触发时会引起某些程 ...

  4. STM32学习心得二十六:DAC数模转换实验

    记录一下,方便以后翻阅~ 主要内容: 1) DAC数模转换原理: 2) 寄存器和库函数介绍: 3) 相关实验代码解读. 实验功能:系统启动后,按WK_UP键,输出电压加200点,对应电压值200*3. ...

  5. Stduino学习(二十六)水位传感器模块

    37种传感器(二十六)水位传感器模块+Stduino Nano&UNO 本文转载自:http://www.stduino.com/forum.php?mod=viewthread&ti ...

  6. 【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用

    上一篇文章学习了编译的过程,点击链接查看:[C语言进阶深度学习记录]十五 编译过程简介,每一个C源文件编译后将会生成目标文件,那么这些目标文件,还需要链接起来,生成可执行文件. 文章目录 1 链接的意 ...

  7. Python学习日记(二十六) 封装和几个装饰器函数

    封装 广义上的封装,它其实是一种面向对象的思想,它能够保护代码;狭义上的封装是面向对象三大特性之一,能把属性和方法都藏起来不让人看见 私有属性 私有属性表示方式即在一个属性名前加上两个双下划线 cla ...

  8. 【Python学习系列二十五】数据结构-有向图绘制

    1.场景:从文件中读取节点.有向边,然后绘制. 2.参考代码: # -*- coding: utf-8 -*-import networkx as nx import matplotlib.pyplo ...

  9. 【Python学习系列二十三】Scikit_Learn库降维方法(矩阵分解)-PCAFA

    1主成分分析PCA 1.1 精确PCA和似然估计 PCA基于最大方差的正交变量分解多维数据集.在scikit-learn库中,PCA的实现是先通过fit方法计算n维的特征值和特征向量,然后通过tran ...

最新文章

  1. Exchange 2016 先决条件
  2. 使用 SSH 免密码登录连接远程服务器
  3. SaaS全球普及面临三大门槛
  4. Oracle中通过游标执行带参数的存储过程实现解析CLOB字段内的xml字符串:
  5. C/C++学习----第二章 继承和派生
  6. Linux系统编程:lseek扩展文件大小失败原因分析
  7. 服务器虚拟化十大因素
  8. 大数据在智慧社区的作用有哪些
  9. VS出现目标包.NETFramework的目标包没有安装
  10. PLC梯形图设计全自动洗衣机S7-1200博途以及PLC仿真实现之 3. 仿真设计
  11. 苹果 / Apple iCloud 教育版 200GB 云盘账号自助注册教程
  12. 分布式架构——Gossip 协议详解
  13. python追加写_python覆盖写入,追加写入的实例
  14. ME51N 创建采购申请
  15. 打字不会学计算机,电脑打字基础知识、打字指法,不会的快来看哦!
  16. 祝福语html特效,2015年微信祝福语特效
  17. 【建议背诵】软考高项考试案例简答题汇总~(9)
  18. 千寻CORS定位服务令人眼前一亮
  19. PS一键磨皮插件:dr5白金版for mac 支持ps2021
  20. 海思芯片图形层的开发指南与方案

热门文章

  1. 明尼苏达量表结果分析_明尼苏达满意度量表+【长式量表100题】+【稀缺资源】+【免费分享】...
  2. jdk7 window 64位安装包 微云网盘下载
  3. 总结过去,展望未来,2019关键的一年
  4. 2023佛山市入户新政细则详解
  5. Unity编辑器Bug----tranform.positon assign attempt for “Scene Camera”is not valid.
  6. 生命不息 减肥不止
  7. Python引用2(Django系列3)
  8. java null是什么类型_Java中的Null到底是什么
  9. 配置管理--版本控制的目的
  10. 网狐棋牌数据库配置问题