예제 #1
0
def main():
    G = nx.DiGraph()
    G = initialization(G)
    R = ford_fulkerson(G, '1', CountNodes(file))
    print("Максимальний потік даного графа: " + str(int(R.graph['flow_value'])) + '\n')
    matrix = transfer_to_matrix(R)
    balance_point(matrix, str(int(R.graph['flow_value'])))
def Algorithm(G, list_node, list_result_maxflow, mod, Risultati_Test):              #calcola il flusso massimo utilizzando l'algoritmo di Ford Fulkerson tra il source e il sink
    result_maxflow = []
    for i in list_node:
        max_flow = ford_fulkerson(G,i[0],i[1])            #max flow e' una lista che contiene nel primo elemento il max flow della rete, nel secondo elemento contiene una lista con tutti i link della rete e le relative capacita' utilizzate dal flusso
        if mod=="dipendente":                                                 
            G = New_Topology(G, max_flow)
        #if max_flow[0] != 0:                                    #NON INSERISCE NELLA LISTA LE COPPIE CHE HANNO MAXFLOW UGUALE A ZERO 
        result_maxflow.append([i[0],i[1],max_flow[0]])      #e' un'array che contiene [source, sink, maxflow]
    list_result_maxflow.append(result_maxflow)
def Algorithm(
    G, list_node, list_result_maxflow, mod, Risultati_Test
):  #calcola il flusso massimo utilizzando l'algoritmo di Ford Fulkerson tra il source e il sink
    result_maxflow = []
    for i in list_node:
        max_flow = ford_fulkerson(
            G, i[0], i[1]
        )  #max flow e' una lista che contiene nel primo elemento il max flow della rete, nel secondo elemento contiene una lista con tutti i link della rete e le relative capacita' utilizzate dal flusso
        if mod == "dipendente":
            G = New_Topology(G, max_flow)
        #if max_flow[0] != 0:                                    #NON INSERISCE NELLA LISTA LE COPPIE CHE HANNO MAXFLOW UGUALE A ZERO
        result_maxflow.append(
            [i[0], i[1],
             max_flow[0]])  #e' un'array che contiene [source, sink, maxflow]
    list_result_maxflow.append(result_maxflow)
예제 #4
0
                G.add_edge(str(u), str(v), capacity=abs(image[l][c] - image[l-1][c]))
                v = (l + 1) * colunas + c
                # conecta para baixo
                G.add_edge(str(u), str(v), capacity=abs(image[l][c] - image[l+1][c]))
                

# inserir o vertice s e t
for i in range(0, vi ):
    l = int(i / colunas)
    c = i % colunas
#    print("i = " + str(i) + "; l = " + str(l) + "; c = " + str(c))
    pixel = image[l][c]
    G.add_edge('s', str(i), capacity=abs(pixel - media_s))
    G.add_edge(str(i), 't', capacity=abs(pixel - media_t))
    
Gf = ford_fulkerson(G, 's', 't', 'capacity')
flow = Gf.graph['flow_value']
flow_dict = Gf.graph['flow_dict']

suc = nx.bfs_successors(Gf, 's')

resultado = np.zeros((64,64), dtype=np.int8)

vertices = suc['s']

for i in range(0, len(vertices)):
    t = int(vertices[i])
    l = int(t / 64)
    c = t % 64
    resultado[l][c] = 1
    
예제 #5
0
G.add_edge('s','3', capacity=3, flow='3/3')

G.add_edge('1','2', capacity=9, flow='0/9')

G.add_edge('2','3', capacity=6, flow='2/6')
G.add_edge('2','4', capacity=3, flow='3/3')

G.add_edge('3','1', capacity=4, flow='0/4')
G.add_edge('3','t', capacity=5, flow='5/5')

G.add_edge('4','1', capacity=1, flow='0/1')
G.add_edge('4','t', capacity=4, flow='3/4')
G.add_edge('4','3', capacity=2, flow='0/2')


R = ford_fulkerson(G, 's','t')
flow_value, flow_dict = nx.maximum_flow(G, 's', 't', flow_func=ford_fulkerson)
print(flow_value)
print(flow_dict)


labels = {}
import pylab as plt
for source_node in flow_dict:
    for dest_node in flow_dict[source_node]:
        labels[(source_node, dest_node)] = flow_dict[source_node][dest_node]

# pos = nx.shell_layout(G)
pos = nx.get_node_attributes(G, 'pos')
flow = nx.get_edge_attributes(G, 'flow')
nx.draw(G, pos)