Ejemplo n.º 1
0
int64 PushRelabel::getFlow() {
    findFlow();
    int64 flow = 0;
    FlowGraph::iterator edgeIterator;
    for (edgeIterator = graph->begin(source); edgeIterator != graph->end(source); ++edgeIterator)
        flow += (*edgeIterator).getFlow();
    return flow;
}
Ejemplo n.º 2
0
/*
return relevent flow for the new packet
if not exist , create a new one and push it to the heap
*/
Flow* getFlow(const Packet* p , bool* insertP, bool virtual_f)
{
	Flow* f = findFlow(p, virtual_f);
	*(insertP) = FALSE;
	if (f == NULL)
	{
		f = createFlow(p, virtual_f);
		*(insertP) = TRUE;
	}
	return f;
}
Ejemplo n.º 3
0
int FordFlukerson(int s,int t,int n) {
    int maxFlow = 0;

    while(1) {
        memset(visited, 0, sizeof(visited));
        if (!DFS(s,t,n))
            break;
        maxFlow += findFlow(s,t);
    }
    return maxFlow;
}