官方文档:

https://networkx.github.io/documentation/networkx-1.10/reference/algorithms.html

最短路和最小生成树:

  1. import networkx as nx
  2. import matplotlib.pyplot as plt
  3.  
  4. G = nx.Graph()
  5. #G.add_node(1) #添加一个节点1
  6. #G.add_edge(2,3,10) #添加一条边2-3(隐含着添加了两个节点2、3)
  7. #G.add_edge(3,2) #对于无向图,边3-2与边2-3被认为是一条边
  8. #G.add_weighted_edges_from([(1,2,8)])
  9. #G.add_weighted_edges_from([(1,3,10)])
  10. #G.add_weighted_edges_from([(2,3,6)])
  11.  
  12. G.add_edge('A', 'B', weight=4)
  13. G.add_edge('B', 'D', weight=2)
  14. G.add_edge('A', 'C', weight=3)
  15. G.add_edge('C', 'D', weight=5)
  16. G.add_edge('A', 'D', weight=6)
  17. G.add_edge('C', 'F', weight=7)
  18. G.add_edge('A', 'G', weight=1)
  19. G.add_edge('H', 'B', weight=2)
  20. for u,v,d in G.edges(data=True):
  21. print(u,v,d['weight'])
  22. edge_labels=dict([((u,v,),d['weight']) for u,v,d in G.edges(data=True)])
  23. #fixed_position = {'A':[ 1., 2.],
  24. # 'B': [ 1., 0.],
  25. # 'D': [ 5., 5.],
  26. # 'C': [ 0.,6.]}#每个点在坐标轴中的位置
  27. #pos=nx.spring_layout(G,pos = fixed_position)#获取结点的位置,每次点的位置都是随机的
  28. pos = nx.spring_layout(G) #也可以不固定点
  29. nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels,font_size=14)#绘制图中边的权重
  30.  
  31. print(edge_labels)
  32. print("nodes:", G.nodes()) #输出全部的节点: [1, 2, 3]
  33. print("edges:", G.edges()) #输出全部的边:[(2, 3)]
  34. print("number of edges:", G.number_of_edges()) #输出边的数量
  35.  
  36. nx.draw_networkx(G,pos,node_size=400)
  37. plt.savefig("wuxiangtu.png")
  38. plt.show()
  39.  
  40. # 生成邻接矩阵
  41. mat = nx.to_numpy_matrix(G)
  42. print(mat)
  43.  
  44. # 计算两点间的最短路
  45. # dijkstra_path
  46. print('dijkstra方法寻找最短路径:')
  47. path=nx.dijkstra_path(G, source='H', target='F')
  48. print('节点H到F的路径:', path)
  49. print('dijkstra方法寻找最短距离:')
  50. distance=nx.dijkstra_path_length(G, source='H', target='F')
  51. print('节点H到F的距离为:', distance)
  52.  
  53. # 一点到所有点的最短路
  54. p=nx.shortest_path(G,source='H') # target not specified
  55. d=nx.shortest_path_length(G,source='H')
  56. for node in G.nodes():
  57. print("H 到",node,"的最短路径为:",p[node])
  58. print("H 到",node,"的最短距离为:",d[node])
  59.  
  60. # 所有点到一点的最短距离
  61. p=nx.shortest_path(G,target='H') # target not specified
  62. d=nx.shortest_path_length(G,target='H')
  63. for node in G.nodes():
  64. print(node,"到 H 的最短路径为:",p[node])
  65. print(node,"到 H 的最短距离为:",d[node])
  66.  
  67. # 任意两点间的最短距离
  68. p=nx.shortest_path_length(G)
  69. p=dict(p)
  70. d=nx.shortest_path_length(G)
  71. d=dict(d)
  72. for node1 in G.nodes():
  73. for node2 in G.nodes():
  74. print(node1,"到",node2,"的最短距离为:",d[node1][node2])
  75.  
  76. # 最小生成树
  77. T=nx.minimum_spanning_tree(G) # 边有权重
  78. print(sorted(T.edges(data=True)))
  79.  
  80. mst=nx.minimum_spanning_edges(G,data=False) # a generator of MST edges
  81. edgelist=list(mst) # make a list of the edges
  82. print(sorted(edgelist))
  83.  
  84. # 使用A *算法的最短路径和路径长度
  85. p=nx.astar_path(G, source='H', target='F')
  86. print('节点H到F的路径:', path)
  87. d=nx.astar_path_length(G, source='H', target='F')
  88. print('节点H到F的距离为:', distance)
  89.  
  90. # 找回路
  91. hl = nx.algorithms.find_cycle(G)
  92. print(hl)
  93.  
  94. # 二分图匹配
  95. G = nx.complete_bipartite_graph(2, 3)
  96. nx.draw_networkx(G)
  97. left, right = nx.bipartite.sets(G)
  98. list(left) #[0, 1]
  99. list(right) #[2, 3, 4]
  100. p = nx.bipartite.maximum_matching(G)
  101. print("输出匹配:",p)
  102.  
  103. # 最大流
  104. # graph's maximum flow
  105. # flow is computed between vertex 0 and vertex n-1
  106. # expected input format:
  107. # n
  108. # m
  109. #g = nx.DiGraph()
  110. #n, m = int(input()), int(input())
  111. #for i in range(n):
  112. # g.add_node(i)
  113. #for _ in range(m):
  114. # a, b, c = [ int(i) for i in input().split(' ') ]
  115. # g.add_edge(a, b, capacity=c)
  116. #max_flow = nx.algorithms.flow.maxflow.maximum_flow(g, 0, n-1)[0]
  117. #print(max_flow)
  118. g = nx.DiGraph()
  119. n, m = 4, 5
  120. for i in range(n):
  121. g.add_node(i)
  122. edge=["0 1 3","1 3 2","0 2 2","2 3 3","0 3 1"]
  123. for x in edge:
  124. a, b, c = [ int(i) for i in x.split(' ') ]
  125. g.add_edge(a, b, capacity=c)
  126. nx.draw(g)
  127. max_flow = nx.algorithms.flow.maxflow.maximum_flow(g, 0, n-1)[0]
  128. print(max_flow)

python图论包networks(最短路,最小生成树带包)的更多相关文章

  1. javac编译带包的java文件需要在命令处加参数

    不带包:javac aaa.java 带包:javac -d . aaa.java 带包就是 java文件中含有 package com.aaa;

  2. matlab学习——04图与网络(最短路,最小生成树,最大流)

    04图与网络 1.最短路 (1) 自己写的dijstra算法 format compact; clc,clear all a=zeros(6); a(1,2)=50;a(1,4)=40;a(1,5)= ...

  3. Python之旅.第四章.模块与包.总结(未完待遇)

    一.模块 模块: 一系列功能的集合体,在python中一个py文件就是一个模块,模块名就是py文件的文件名: 模块的好处: 1.减少重复的代码 2.拿来主义 定义模块: 就是创建一个py文件: 使用模 ...

  4. Python【第四课】 模块 and 包

    本篇内容 模块基础和导入(import,from...import...) 包常识和导入(import,from...import...) 函数式第一类对象 1.模块基础和导入 1.1 模块认识 什么 ...

  5. Python数据分析必备Anaconda安装、快捷键、包安装

    Python数据分析必备: 1.Anaconda操作 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便 ...

  6. Py修行路 python基础 (二十三)模块与包

    一.模块 1)定义: 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2)为何要用模块: 退出python解释器然后重新进入,那之前定义的函数或者变量都将丢失,因 ...

  7. python's twenty ninthday for me 模块和包

    模块 和 脚本的 区别:   如果一个py文件被导入了,就是一个模块. 如果这个py文件被直接执行,这个被直接执行的文件就是一个脚本. 模块:1,没有具体的调用过程.2,能对外提供功能. pyc文件: ...

  8. Python及bs4、lxml、numpy模块包的安装

    http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...

  9. Python标准库08 多线程与同步 (threading包)

    Python主要通过标准库中的threading包来实现多线程.在当今网络时代,每个服务器都会接收到大量的请求.服务器可以利用多线程的方式来处理这些请求,以提高对网络端口的读写效率.Python是一种 ...

随机推荐

  1. SQL性能优化思路

    1. 尽可能把数据的存储和计算放入Memory而不是Disk,且减少IO操作,比如运用Redis等缓存技术 2. 对数据表进行精心设计,特别是大数据表,对常用数据字段进行适当的冗余,尽可能避免分表导致 ...

  2. 开启 clr enabled

    '; GO RECONFIGURE; GO '; GO RECONFIGURE; '; GO

  3. 2018 CERC 混合博弈

    N堆石子 先手最多拿A个 后手最多拿B个 每次都至少要拿一个 谁先取完谁赢 如果A和B相等直接就是一个bash博弈 如果一个石堆的石子数少于min(A,B) 则是个nim游戏 我们先讨论只有N=1且A ...

  4. PAT乙级1044

    题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805279328157696 题解 需要注意的几个点: 题目有指 ...

  5. Mysql 语法豆知识

    https://www.cnblogs.com/chentianwei/p/8093748.html mysql增加了大量语法,以前没有接触过.比如 create function begin..en ...

  6. Spring-使用JAVA的方式配置Spring-代理模式

    9.使用Java的方式配置Spring 我们现在要完全不使用Spring的xml配置了,全权交给Java来做! JavaConfig是Spring的一个子项目,在Spring4之后,它成为了一个核心功 ...

  7. 甘特图、Data Editors控件新玩法—DevExpress WPF v19.2

    通过DevExpress WPF Controls,你能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案. 无论是Office办公软件的衍 ...

  8. focusout([data],fn) 当元素失去焦点时触发 focusout 事件。

    focusout([data],fn) 概述 当元素失去焦点时触发 focusout 事件. focusout事件跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况.大理石平台怎么样 参 ...

  9. CF1182F Maximum Sine【类欧,扩欧】

    题目链接:洛谷 题目描述:求整数$x\in [a,b]$使得$|2px \ mod \ 2q-q|$最小,如果有多个$x$输出最小的. 数据范围:$1\leq a,b,p,q\leq 10^9$ 第一 ...

  10. php foreach 中使用&时注意

    结果: 没看懂的可以参考 :https://blog.csdn.net/ghostyusheng/article/details/79925351