Hi,

 

I want to redirect Flow, which I have earlier calculated with Edmonds-Karp, with Breadth-First-Search (Aim is to determine the maximal free capacity of an edge by redirecting all possible flow to other edges)

When I call Edmonds-Karp the Maximal Flow is calculated. If I then print out the values of the residual capacities of the edges, all edges with a capacity of 0 (this are the reverse edges) have a residual capacity of 0 instead of a capacity equal to the flow of the reverse edge.

 

I wrote the following code to correct the values:

 

long speicher[num_edges(g)];

 

for(tie(e_iter,e_end)=edges(g); e_iter!=e_end; ++e_iter)                        

             if(get(e_index,*e_iter) < num_edges(g)/2){

                    speicher[e_index[*e_iter]] = residual_capacity[*e_iter];

                    speicher[e_index[*e_iter]+(num_edges(g)/2)] = flow[*e_iter];             

             }     

      

      

for(tie(e_iter,e_end)=edges(g); e_iter!=e_end; ++e_iter)

       put(residual_capacity,*e_iter,speicher[e_index[*e_iter]]);

 

 

But this is very time inefficient.

Does anyone have an idea why the reverse edges do not have the correct residual capacity?

 

Another strange phenomenon is that if I allocate the correct residual capacity only to the reverse edges because the others are correct this change to the residual capacities is not saved.

 

for(tie(e_iter,e_end)=edges(g); e_iter!=e_end; ++e_iter)                        

             if(get(e_index,*e_iter) < num_edges(g)/2){

                    put(residual_capacity,reverse_edge[*e_iter],flow[*e_iter]);

            

      

Thanks

 

Benjamin