Ford-Fulkerson algorithm with depth first search

user1180619 picture user1180619 · May 24, 2013 · Viewed 7.3k times · Source

I am doing a homework of Implementing Ford-Fulkerson algorithm, they said we should use DFS for path finding but i am stuck at somewhere. I am not posting the code because it's localized too much. Actually my DFS algorithm works well but the dead ends cause a problem for example if i run my code i get output of DFS like that

0=>1 1=>2 1=>3 3=>5

It starts from 0 and it ends in 5 but the 1=>2 part is unnessecary for my algorithm also i store my path using [N][2] matrix. My question is how can I remove the dead ends in my resulting matrix (Inside of the DFS recursion perhaps?)

Answer

Juan Lopes picture Juan Lopes · May 24, 2013

You should perform the DFS to find some path between the source and the sink. Then, when the dfs is retuning, you should add a flow

Here's an example. The function "send" is a DFS. Notice that I pass along with the DFS the minimum capacity value found during the search:

https://github.com/juanplopes/icpc/blob/master/uva/820.cpp

int send(int s, int t, int minn) {
    V[s] = true;

    if (s==t) return minn;

    for(int i=1; i<=n; i++) {
        int capacity = G[s][i]-F[s][i];
        if (!V[i] && capacity > 0) {
            if (int sent = send(i, t, min(minn, capacity))) {
                F[s][i] += sent;
                F[i][s] -= sent;
                return sent;
            }
        }
    }

    return 0;
}