Esempio n. 1
0
 private void BackEdge(object sender, UndirectedEdgeEventArgs <TVertex, TEdge> a)
 {
     if (!this.AllowCyclicGraph)
     {
         throw new NonAcyclicGraphException();
     }
 }
        private void OnEdgeDiscovered([NotNull] object sender, [NotNull] UndirectedEdgeEventArgs <TVertex, TEdge> args)
        {
            Debug.Assert(sender != null);
            Debug.Assert(args != null);

            VerticesPredecessors[args.Target] = args.Edge;
        }
Esempio n. 3
0
        private void treeEdge(object sender, UndirectedEdgeEventArgs <int, TaggedEdge <int, string> > e)
        {
            var vertexTarget = e.Target;

            //Associate vertex with predecessor edge
            vertexPredecessors.Add(vertexTarget, e.Edge);
        }
 private void BackEdge([NotNull] object sender, [NotNull] UndirectedEdgeEventArgs <TVertex, TEdge> args)
 {
     if (!AllowCyclicGraph)
     {
         throw new NonAcyclicGraphException();
     }
 }
 private void TreeEdge(Object sender, UndirectedEdgeEventArgs<TVertex,TEdge> args)
 {
     double sourceDistance;
     if (!this.distances.TryGetValue(args.Source, out sourceDistance))
         this.distances[args.Source] = sourceDistance = this.distanceRelaxer.InitialDistance;
     this.distances[args.Target] = this.DistanceRelaxer.Combine(sourceDistance, this.edgeWeights(args.Edge));
 }
        private void OnEdgeDiscovered([NotNull] object sender, [NotNull] UndirectedEdgeEventArgs <TVertex, TEdge> args)
        {
            Debug.Assert(sender != null);
            Debug.Assert(args != null);

            if (!Distances.TryGetValue(args.Source, out double sourceDistance))
            {
                Distances[args.Source] = sourceDistance = DistanceRelaxer.InitialDistance;
            }
            Distances[args.Target] = DistanceRelaxer.Combine(sourceDistance, EdgeWeights(args.Edge));
        }
        private void OnDijkstraTreeEdge(object sender, UndirectedEdgeEventArgs <TVertex, TEdge> args)
        {
            Debug.Assert(args != null);

            bool decreased = Relax(args.Edge, args.Source, args.Target);

            if (decreased)
            {
                OnTreeEdge(args.Edge, args.Reversed);
            }
            else
            {
                OnEdgeNotRelaxed(args.Edge, args.Reversed);
            }
        }
Esempio n. 8
0
        private void InternalTreeEdge(Object sender, UndirectedEdgeEventArgs <TVertex, TEdge> args)
        {
            Contract.Requires(args != null);

            bool decreased = Relax(args.Edge, args.Source, args.Target);

            if (decreased)
            {
                this.OnTreeEdge(args.Edge, args.Reversed);
            }
            else
            {
                this.OnEdgeNotRelaxed(args.Edge, args.Reversed);
            }
        }
        private void OnGrayTarget(object sender, UndirectedEdgeEventArgs <TVertex, TEdge> args)
        {
            Debug.Assert(args != null);

            bool decreased = Relax(args.Edge, args.Source, args.Target);

            if (decreased)
            {
                _vertexQueue.Update(args.Target);
                AssertHeap();
                OnTreeEdge(args.Edge, args.Reversed);
            }
            else
            {
                OnEdgeNotRelaxed(args.Edge, args.Reversed);
            }
        }
Esempio n. 10
0
        private void InternalGrayTarget(Object sender, UndirectedEdgeEventArgs <TVertex, TEdge> args)
        {
            Contract.Requires(args != null);

            bool decreased = Relax(args.Edge, args.Source, args.Target);

            if (decreased)
            {
                this.vertexQueue.Update(args.Target);
                this.AssertHeap();
                OnTreeEdge(args.Edge, args.Reversed);
            }
            else
            {
                OnEdgeNotRelaxed(args.Edge, args.Reversed);
            }
        }
Esempio n. 11
0
        public void Constructor()
        {
            var edge = new Edge <int>(1, 2);

            var args = new UndirectedEdgeEventArgs <int, Edge <int> >(edge, false);

            Assert.IsFalse(args.Reversed);
            Assert.AreSame(edge, args.Edge);
            Assert.AreEqual(1, args.Source);
            Assert.AreEqual(2, args.Target);

            args = new UndirectedEdgeEventArgs <int, Edge <int> >(edge, true);
            Assert.IsTrue(args.Reversed);
            Assert.AreSame(edge, args.Edge);
            Assert.AreEqual(2, args.Source);
            Assert.AreEqual(1, args.Target);
        }
 void TreeEdge(Object sender, UndirectedEdgeEventArgs <TVertex, TEdge> e)
 {
     this.vertexPredecessors[e.Target] = e.Edge;
 }
 private void dfs_TreeEdge(object sender, UndirectedEdgeEventArgs <TVertex, TEdge> e)
 {
     // count children of nodes in predessor tree
     _vertexPredecessors[e.Target] = e.Source;
     _dfsChildren[e.Source]       += 1;
 }
 private void dfs_BackEdge(object sender, UndirectedEdgeEventArgs <TVertex, TEdge> e)
 {
     //_lowDiscoverTimes[e.Source] = _discoverTimes[e.Target];
     _lowDiscoverTimes[e.Source] = Math.Min(_discoverTimes[e.Target], _lowDiscoverTimes[e.Source]);
 }