private bool HasAugmentingPath(FlowNetwork graph, int s, int t) { _edgeTo = new Dictionary <int, FlowEdge>(); _marked = new HashSet <int>(); var queue = new Queue <int>(); queue.Enqueue(s); _marked.Add(s); while (queue.Count > 0) { var v = queue.Dequeue(); foreach (var edge in graph.Adjacent(v)) { var w = edge.Other(v); if (edge.ResidualCapacityTo(w) > 0 && !_marked.Contains(w)) { _edgeTo.Add(w, edge); _marked.Add(w); queue.Enqueue(w); } } } return(_marked.Contains(t)); }