ó žÃÒYc@sVdZdZddlZddlTdgZd„Zd„Zdde dd „Z dS( s3 Edmonds-Karp algorithm for maximum flow problems. s&ysitu iÿÿÿÿN(t*t edmonds_karpc s|j}|j‰|j‰|jd‰‡‡fd†}‡‡‡‡fd†}d}xµ||kr|ƒ\}} } | dkr‰Pn|g} |} x'| ˆkrÁ| | } | j| ƒq›W| jƒ|} x'| ˆkrû| | } | j| ƒqÕW||| ƒ7}q[W|S(s2Implementation of the Edmonds-Karp algorithm. tinfcsãˆ}t|ƒ}t|ƒ}x=|D]5}ˆ||}t||d|dƒ}|}q%W|dˆkr€tjdƒ‚nt|ƒ}t|ƒ}xD|D]<}ˆ||dc|7<ˆ||dc|8<|}qŸW|S(s/Augment flow along a path from s to t. tcapacitytflowis-Infinite capacity path, flow unbounded above.(titertnexttmintnxtNetworkXUnbounded(tpathRtittutvtattr(tR_succR(sz/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/flow/edmondskarp.pytaugments"         csˆidˆ6}ˆg}idˆ6}ˆg}xUtrƒg}t|ƒt|ƒkrëx‚|D]z}xqˆ|jƒD]_\}}||krq|d|dkrq|||<||krÀ|||fS|j|ƒqqqqWqZW|sâdS|}q/x‚|D]z}xqˆ|jƒD]_\}}||kr |d|dkr |||<||krX|||fS|j|ƒq q WqòW|szdS|}q/WdS(sCBidirectional breadth-first search for an augmenting path. RRN(NNN(NNN(tNonetTruetlentitemstappend(tpredtq_stsucctq_ttqR R R(tR_predRtstt(sz/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/flow/edmondskarp.pytbidirectional_bfs1s6                iN(tnodesRRtgraphRRtreverse( tRRRtcutofftR_nodesRRt flow_valueR RRR R ((RRRRRsz/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/flow/edmondskarp.pytedmonds_karp_cores.    !     c Cs||kr(tjdt|ƒƒ‚n||krPtjdt|ƒƒ‚n||krntjdƒ‚n|dkrŒt||ƒ}n|}x3|D]+}x"||jƒD]}d|d>> import networkx as nx >>> from networkx.algorithms.flow import edmonds_karp The functions that implement flow algorithms and output a residual network, such as this one, are not imported to the base NetworkX namespace, so you have to explicitly import them from the flow package. >>> G = nx.DiGraph() >>> G.add_edge('x','a', capacity=3.0) >>> G.add_edge('x','b', capacity=1.0) >>> G.add_edge('a','c', capacity=3.0) >>> G.add_edge('b','c', capacity=5.0) >>> G.add_edge('b','d', capacity=4.0) >>> G.add_edge('d','e', capacity=2.0) >>> G.add_edge('c','y', capacity=2.0) >>> G.add_edge('e','y', capacity=3.0) >>> R = edmonds_karp(G, 'x', 'y') >>> flow_value = nx.maximum_flow_value(G, 'x', 'y') >>> flow_value 3.0 >>> flow_value == R.graph['flow_value'] True Rt algorithm(R/R (R,RRRR-t value_onlyR#R"((sz/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/flow/edmondskarp.pyRƒsu ( t__doc__t __author__tnetworkxRtnetworkx.algorithms.flow.utilst__all__R&R/RtFalseR(((sz/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/flow/edmondskarp.pyts    W