关闭

Python networkx 实现网络流

标签: python算法
429人阅读 评论(0) 收藏 举报
分类:

最近帮同学做作业……发现国外的算法平台确实做得很完善……

在这个平台里,你可以写一些脚本让文件相互调用,对于现有的算法,比如跑最大流的ford-fulkerson算法,可以很轻松地调用已有的算法包来实现……简直是健忘星人的福音……还要啥自行车……当然我不知道这个复杂度为什么是O(m2logC)……

To aid you in your task you have been provided with an implementation of the Ford-Fulkerson algorithm. You may assume without proof that this algorithm correctly returns the maximum flow of a given flow network G in O(m2logC) time using O(n+m) space, where C is maximum flow in G.


# ford-fulkerson.py

# this is a simple script to print a graph's maximum flow
# you can pipe the output of your pre-processing script to this
# script if you don't want to run ford-fulkerson in your script
# flow is computed between vertex 0 and vertex n-1

# expected input format:
# n
# m
# vertexId vertexId capacity
# vertexId vertexId capacity
# ...
# vertexId vertexId capacity

import networkx as nx

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)

为了调用它,可以先写一个C++程序做个小测试

// a1.cc
#include <string>
#include <iostream>
using namespace std;
int main() {
    string str = "4\n5\n0 1 3\n1 3 2\n0 2 2\n2 3 3\n0 3 1\n";
    cout << str;
    return 0;
}

Linux后台,配置文件为build.sh进行编译

#! /usr/bin/env bash

# C
# clang a1.c -o a4

# C++
clang++ a1.cc -o a4

# Java
# javac A4.java

以及run.sh运行

#! /usr/bin/env bash

# C/C++
./a4 | python3 ford-fulkerson.py

# Java
# java A4 | python3 ford-fulkerson.py

# Python
# python3 a4.py

答案是5.

所以我们的工作量就变成了……只需要建图就好咯!

1
0
查看评论

poj2987(网络最大流求最大闭合子图权值)

/* translation: 给出一张单向图,每个结点有固定的权值。每次选择一个点的同时,与该点单向连接的点也必须选择(比如u->v,选择u的同时 也必须选择v,但是对于k->u,k就不是必选的。)现在求一种选择方案使得其选择的权值最大的同时,选择的点数目最小。 sol...
  • qq_29169749
  • qq_29169749
  • 2017-01-29 22:17
  • 193

Python网络流

Load balance问题用网络流解决,Python实现
  • u011462357
  • u011462357
  • 2016-12-18 17:04
  • 541

Python Scoket网络流读取 封装

封装了简单的网络流操作类 需要的同学可以自行扩展 具体使用的接口解释可以参照官网文档的 python struct API https://docs.python.org/2/library/struct.htmlimport struct from ctypes import create_s...
  • leilonghao
  • leilonghao
  • 2017-03-30 10:06
  • 550

网络流算法Dinic的Python实现

在上一篇我们提到了网络流算法Push-relabel,那是90年代提出的算法,算是比较新的,而现在要说的Dinic算法则是由以色列人Dinitz在冷战时期,即60-70年代提出的算法变种而来的,其算法复杂度为O(mn^2)。 Dinic算法主要思想也是基于FF算法的,改进的地方也是减少寻找增广路径...
  • xanxus46
  • xanxus46
  • 2015-01-02 16:21
  • 1460

网络流初步-最大流

来源:http://blog.csdn.net/qiankun1993/article/details/6782838 来源:http://blog.csdn.net/y990041769/article/details/21026445 网络流 首先来看一下基本的网络流模型。 &#...
  • sentimental_dog
  • sentimental_dog
  • 2016-07-09 15:07
  • 516

Python networkx 实现网络流

标签: 网络流 Python最近帮同学做作业……发现国外的算法平台确实做得很完善……在这个平台里,你可以写一些脚本让文件相互调用,对于现有的算法,比如跑最大流的ford-fulkerson算法,可以很轻松地调用已有的算法包来实现……简直是健忘星人的福音……还要啥自行车……当然我不知道这个复杂度为什么...
  • Danliwoo
  • Danliwoo
  • 2017-10-12 20:47
  • 429

boost 最大流求解示例

#include #include #include #include #include #include #include #include /* , boost::property <boost::vertex_color_t, boost::default...
  • xueyunf
  • xueyunf
  • 2015-09-16 14:40
  • 633

Python NetworkX/Community包进行网络划分和可视化

Whenever people agree with me, i always feel i must be wrong. 每次别人赞同我时,我都觉得自己一定错了。 Python NetworkX/Community包进行网络划分和可视化networkx 提供画图的函数有:draw(G,[...
  • DreamHome_S
  • DreamHome_S
  • 2017-09-26 16:01
  • 754

Networkx常用算法和求最短路径介绍

求最短路径难道很多人没有发现网上很多人给出的函数是对无权图求的么?默认边的权值都为1,其实可以按照给定的权重求,文章后面有介绍 Algorithms https://networkx.readthedocs.io/en/stable/reference/algorithms.html 大概介绍...
  • yuexiaomao
  • yuexiaomao
  • 2016-09-05 15:19
  • 5031

最小费用流算法不完全指南-2017华为软件精英挑战赛

前言整个比赛历时70多天,是一场持久战,期间看了不少资料,实现了一些算法,现总结如下。初赛的思路是启发式+费用流,启发式实现了遗传算法、模拟退火,费用流实现了连续最短路(spfa),zkw/primal-dual,网络单纯形(决赛写的),这些算法其实都不是自己手写的,是从网上的模板改造过来的。初赛规...
  • shanchuan2012
  • shanchuan2012
  • 2017-05-17 17:32
  • 2204
    个人资料
    • 访问:68867次
    • 积分:1523
    • 等级:
    • 排名:千里之外
    • 原创:79篇
    • 转载:2篇
    • 译文:1篇
    • 评论:45条
    最新评论