python图论包networks(最短路,最小生成树带包)
官方文档:
https://networkx.github.io/documentation/networkx-1.10/reference/algorithms.html
最短路和最小生成树:
import networkx as nx
import matplotlib.pyplot as plt G = nx.Graph()
#G.add_node(1) #添加一个节点1
#G.add_edge(2,3,10) #添加一条边2-3(隐含着添加了两个节点2、3)
#G.add_edge(3,2) #对于无向图,边3-2与边2-3被认为是一条边
#G.add_weighted_edges_from([(1,2,8)])
#G.add_weighted_edges_from([(1,3,10)])
#G.add_weighted_edges_from([(2,3,6)]) G.add_edge('A', 'B', weight=4)
G.add_edge('B', 'D', weight=2)
G.add_edge('A', 'C', weight=3)
G.add_edge('C', 'D', weight=5)
G.add_edge('A', 'D', weight=6)
G.add_edge('C', 'F', weight=7)
G.add_edge('A', 'G', weight=1)
G.add_edge('H', 'B', weight=2)
for u,v,d in G.edges(data=True):
print(u,v,d['weight'])
edge_labels=dict([((u,v,),d['weight']) for u,v,d in G.edges(data=True)])
#fixed_position = {'A':[ 1., 2.],
# 'B': [ 1., 0.],
# 'D': [ 5., 5.],
# 'C': [ 0.,6.]}#每个点在坐标轴中的位置
#pos=nx.spring_layout(G,pos = fixed_position)#获取结点的位置,每次点的位置都是随机的
pos = nx.spring_layout(G) #也可以不固定点
nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels,font_size=14)#绘制图中边的权重 print(edge_labels)
print("nodes:", G.nodes()) #输出全部的节点: [1, 2, 3]
print("edges:", G.edges()) #输出全部的边:[(2, 3)]
print("number of edges:", G.number_of_edges()) #输出边的数量 nx.draw_networkx(G,pos,node_size=400)
plt.savefig("wuxiangtu.png")
plt.show() # 生成邻接矩阵
mat = nx.to_numpy_matrix(G)
print(mat) # 计算两点间的最短路
# dijkstra_path
print('dijkstra方法寻找最短路径:')
path=nx.dijkstra_path(G, source='H', target='F')
print('节点H到F的路径:', path)
print('dijkstra方法寻找最短距离:')
distance=nx.dijkstra_path_length(G, source='H', target='F')
print('节点H到F的距离为:', distance) # 一点到所有点的最短路
p=nx.shortest_path(G,source='H') # target not specified
d=nx.shortest_path_length(G,source='H')
for node in G.nodes():
print("H 到",node,"的最短路径为:",p[node])
print("H 到",node,"的最短距离为:",d[node]) # 所有点到一点的最短距离
p=nx.shortest_path(G,target='H') # target not specified
d=nx.shortest_path_length(G,target='H')
for node in G.nodes():
print(node,"到 H 的最短路径为:",p[node])
print(node,"到 H 的最短距离为:",d[node]) # 任意两点间的最短距离
p=nx.shortest_path_length(G)
p=dict(p)
d=nx.shortest_path_length(G)
d=dict(d)
for node1 in G.nodes():
for node2 in G.nodes():
print(node1,"到",node2,"的最短距离为:",d[node1][node2]) # 最小生成树
T=nx.minimum_spanning_tree(G) # 边有权重
print(sorted(T.edges(data=True))) mst=nx.minimum_spanning_edges(G,data=False) # a generator of MST edges
edgelist=list(mst) # make a list of the edges
print(sorted(edgelist)) # 使用A *算法的最短路径和路径长度
p=nx.astar_path(G, source='H', target='F')
print('节点H到F的路径:', path)
d=nx.astar_path_length(G, source='H', target='F')
print('节点H到F的距离为:', distance) # 找回路
hl = nx.algorithms.find_cycle(G)
print(hl) # 二分图匹配
G = nx.complete_bipartite_graph(2, 3)
nx.draw_networkx(G)
left, right = nx.bipartite.sets(G)
list(left) #[0, 1]
list(right) #[2, 3, 4]
p = nx.bipartite.maximum_matching(G)
print("输出匹配:",p) # 最大流
# graph's maximum flow
# flow is computed between vertex 0 and vertex n-1
# expected input format:
# n
# m
#g = nx.DiGraph()
#n, m = int(input()), int(input())
#for i in range(n):
# g.add_node(i)
#for _ in range(m):
# a, b, c = [ int(i) for i in input().split(' ') ]
# g.add_edge(a, b, capacity=c)
#max_flow = nx.algorithms.flow.maxflow.maximum_flow(g, 0, n-1)[0]
#print(max_flow)
g = nx.DiGraph()
n, m = 4, 5
for i in range(n):
g.add_node(i)
edge=["0 1 3","1 3 2","0 2 2","2 3 3","0 3 1"]
for x in edge:
a, b, c = [ int(i) for i in x.split(' ') ]
g.add_edge(a, b, capacity=c)
nx.draw(g)
max_flow = nx.algorithms.flow.maxflow.maximum_flow(g, 0, n-1)[0]
print(max_flow)
python图论包networks(最短路,最小生成树带包)的更多相关文章
- javac编译带包的java文件需要在命令处加参数
不带包:javac aaa.java 带包:javac -d . aaa.java 带包就是 java文件中含有 package com.aaa;
- 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)= ...
- Python之旅.第四章.模块与包.总结(未完待遇)
一.模块 模块: 一系列功能的集合体,在python中一个py文件就是一个模块,模块名就是py文件的文件名: 模块的好处: 1.减少重复的代码 2.拿来主义 定义模块: 就是创建一个py文件: 使用模 ...
- Python【第四课】 模块 and 包
本篇内容 模块基础和导入(import,from...import...) 包常识和导入(import,from...import...) 函数式第一类对象 1.模块基础和导入 1.1 模块认识 什么 ...
- Python数据分析必备Anaconda安装、快捷键、包安装
Python数据分析必备: 1.Anaconda操作 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便 ...
- Py修行路 python基础 (二十三)模块与包
一.模块 1)定义: 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2)为何要用模块: 退出python解释器然后重新进入,那之前定义的函数或者变量都将丢失,因 ...
- python's twenty ninthday for me 模块和包
模块 和 脚本的 区别: 如果一个py文件被导入了,就是一个模块. 如果这个py文件被直接执行,这个被直接执行的文件就是一个脚本. 模块:1,没有具体的调用过程.2,能对外提供功能. pyc文件: ...
- Python及bs4、lxml、numpy模块包的安装
http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...
- Python标准库08 多线程与同步 (threading包)
Python主要通过标准库中的threading包来实现多线程.在当今网络时代,每个服务器都会接收到大量的请求.服务器可以利用多线程的方式来处理这些请求,以提高对网络端口的读写效率.Python是一种 ...
随机推荐
- APP中的第三方“支付”功能测试建议
目前市场上APP中带有支付功能的产品有非常多,那么APP中带有第三方支付功能的产品在这一模块该如何测试才尽可能的确保测试完整性. 正常流程: 正常使用支付宝.微信.银行卡(目前使用最多的第三方支付方式 ...
- idou老师带你认识Istio13:Istio实现基础认证策略
前言 微服务架构提供了更好的灵活性.可伸缩性以及服务复用的能力,但,微服务也有特殊的安全需求,Istio Security尝试提供全面的安全解决方案.为了提供灵活的服务访问控制,需要双向 TLS 和细 ...
- c信号量操作demo
#include <stdio.h> #include <string.h> #include <sys/ipc.h> #include <sys/sem.h ...
- 2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数
连续区间的最大公约数 思路:参照BZOJ 4488: [Jsoi2015]最大公约数脑补出的一个\(map\)套\(vector\)的写法,写起来比线段树短,运行时间比线段树快. 代码: #pragm ...
- python3 虚拟环境
一.python中的虚拟环境 1.虚拟环境:局部的,独立的python环境,完全模拟系统全局python环境的使用 二.安装 http://virtualenv.pypa.io/en/latest/u ...
- TFTP简单文件传送协议
T F T P ( Trivial File Transfer Protocol)即简单文件传送协议,最初打算用于引导无盘系统(通常是工作站或X终端).和将在介绍的使用T C P的文件传送协议(F T ...
- IntelliJ IDEA 配置JDK
一.JDK下载 首先要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击 ...
- 2014年9月9日 高级命令command的使用(上)
上次说到了菜单 工具条按钮 上下文菜单都已经改为用command的方式去做了,这次稍微详细地说说. 在command的实现拓展点handler上右键,可以看到有enabledWhen,activeWh ...
- gRPC 到 JSON 代理生成器 grpc-gateway
grpc-gateway是protoc的插件,它读取protobuf服务定义并生成反向代理服务器,该服务将RESTful HTTP API转换为gRPC. 这个服务是根据你的服务定义中的google. ...
- webdriver对各种浏览器的支持
1.Firefox WebDriver实现了FireFoxDriver,无需用户下载FireFoxDriver. 优点:FireFoxDriver对页面的自动化测试支持得比较好,很直观地模拟页面的操作 ...