private void RunBfs() { algo = new ParallelBreadthFirstSearchAlgorithm <int, Edge <int>, int>(g); try { algo.InitializeVertex += new VertexEventHandler <int>(this.InitializeVertex); algo.DiscoverVertex += new ParallelVertexEventHandler <int, int>(this.DiscoverVertex); algo.ExamineVertex += new ParallelVertexEventHandler <int, int>(this.ExamineVertex); algo.TreeEdge += new ParallelEdgeAction <int, Edge <int>, int>(this.TreeEdge); algo.NextLevel += new EventHandler(algo_NextLevel); algo.FinishVertex += new ParallelVertexEventHandler <int, int>(this.FinishVertex); parents.Clear(); distances.Clear(); currentDistance = 0; foreach (int v in g.Vertices) { distances[v] = int.MaxValue; parents[v] = v; } distances[sourceVertex] = 0; algo.Compute(sourceVertex); this.CheckBfs(); } finally { algo.InitializeVertex -= new VertexEventHandler <int>(this.InitializeVertex); algo.DiscoverVertex -= new ParallelVertexEventHandler <int, int>(this.DiscoverVertex); algo.ExamineVertex -= new ParallelVertexEventHandler <int, int>(this.ExamineVertex); algo.TreeEdge -= new ParallelEdgeAction <int, Edge <int>, int>(this.TreeEdge); algo.FinishVertex -= new ParallelVertexEventHandler <int, int>(this.FinishVertex); } }
public void Init() { this.parents = new Dictionary <int, int>(); this.distances = new Dictionary <int, int>(); this.currentDistance = 0; this.algo = null; this.g = null; }