/// <summary> /// Executes the algorithm. /// </summary> protected override void RunInternal() { this.StartListenToLocalProgress(graph.Nodes.Count); Result = new double[graph.Nodes.Count]; var q = new Microsoft.Msagl.Core.DataStructures.GenericBinaryHeapPriorityQueue<Node>(); Dictionary<Node, double> d = new Dictionary<Node, double>(); foreach (Node node in graph.Nodes) { q.Enqueue(node, Double.PositiveInfinity); d[node] = Double.PositiveInfinity; } q.DecreasePriority(source, 0); while (q.Count>0) { ProgressStep(); double prio; Node u = q.Dequeue(out prio); d[u] = prio; IEnumerator<Edge> enumerator; if (directed) enumerator = u.OutEdges.GetEnumerator(); else enumerator = u.Edges.GetEnumerator(); while (enumerator.MoveNext()) { Edge uv = enumerator.Current; Node v = uv.Target; if (u == v) v = uv.Source; // relaxation step if (d[v] > d[u] + uv.Length) { d[v] = d[u] + uv.Length; q.DecreasePriority(v, d[v]); } } } int i = 0; foreach (Node v in graph.Nodes) { #if SHARPKIT //https://github.com/SharpKit/SharpKit/issues/7 out keyword not working with arrays double dummy; if (!d.TryGetValue(v, out dummy)) dummy = Double.PositiveInfinity; Result[i] = dummy; #else if (!d.TryGetValue(v, out Result[i])) Result[i] = Double.PositiveInfinity; #endif i++; } }
/// <summary> /// Executes the algorithm. /// </summary> protected override void RunInternal() { this.StartListenToLocalProgress(graph.Nodes.Count); Result = new double[graph.Nodes.Count]; var q = new Microsoft.Msagl.Core.DataStructures.GenericBinaryHeapPriorityQueue <Node>(); Dictionary <Node, double> d = new Dictionary <Node, double>(); foreach (Node node in graph.Nodes) { q.Enqueue(node, Double.PositiveInfinity); d[node] = Double.PositiveInfinity; } q.DecreasePriority(source, 0); while (q.Count > 0) { ProgressStep(); double prio; Node u = q.Dequeue(out prio); d[u] = prio; IEnumerator <Edge> enumerator; if (directed) { enumerator = u.OutEdges.GetEnumerator(); } else { enumerator = u.Edges.GetEnumerator(); } while (enumerator.MoveNext()) { Edge uv = enumerator.Current; Node v = uv.Target; if (u == v) { v = uv.Source; } // relaxation step if (d[v] > d[u] + uv.Length) { d[v] = d[u] + uv.Length; q.DecreasePriority(v, d[v]); } } } int i = 0; foreach (Node v in graph.Nodes) { #if SHARPKIT //https://github.com/SharpKit/SharpKit/issues/7 out keyword not working with arrays double dummy; if (!d.TryGetValue(v, out dummy)) { dummy = Double.PositiveInfinity; } Result[i] = dummy; #else if (!d.TryGetValue(v, out Result[i])) { Result[i] = Double.PositiveInfinity; } #endif i++; } }