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)
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
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)