Я пытаюсь написать скрипт, чтобы найти все пути от источника к стоку в вашей типичной проблеме максимального потока. В целом это будет служить шагом 1 при реализации алгоритма Форда-Фулкерсона в качестве проекта для класса.
Я выполнил некоторую базовую отладку, но, похоже, происходит то, что алгоритм не выдает все дочерние элементы, которые должны быть через цикл for, а вместо этого просто находит один и тот же путь несколько раз, а затем завершается.
#pathfinder
function final=pathFinder(A,path) #call with path=1 to initiate
#A is a matrix that looks like
# u v w where uv is an edge, and w is its weight (weight is used later)
vert=path(numel(path)); #get last vertex used
F=find(A(:,1)'==vert); #find incident edges
disp("F is");
disp(F); #displaying these for debugging purposes
if(sum(F)==0) #terminates with no more edges (happens only at sink)
#save externally
disp("path found!");
disp(path);
final=0; #terminate it
else
for i=1:numel(F) #this should split this up in "children" for recursion, but it does not. Why?
b=F(i);
path=[path, A(b,2)]; #add new vertex/edge to path
disp("non-final path");
disp(path);
disp("going deeper");
final=pathFinder(A,path); #recurs on next vertex
endfor
endif
endfunction
Пример графика, который я использую:
A=[1 2 0; 1 3 0; 2 3 0; 2 4 0; 3 4 0];
, которые должны иметь пути [1 2 3 4], [1 2 4], [1 3 4] (в порядке, указанном в алгоритме).