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; }
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); } }
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); } }
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); } }
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]); }