Пример #1
0
        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));
        }