문제

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

도움이 되었습니까?

해결책

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top