Search code examples
calgorithmgraph-algorithmdepth-first-searchford-fulkerson

Ford-Fulkerson algorithm with depth first search


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


Solution

  • 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;
    }