public static BinaryPriorityQueue ReadOnly(BinaryPriorityQueue P) { return new BinaryPriorityQueue(ArrayList.ReadOnly(P.InnerList), P.Comparer, false); }
public static BinaryPriorityQueue Syncronized(BinaryPriorityQueue P) { return new BinaryPriorityQueue(ArrayList.Synchronized(P.InnerList), P.Comparer, false); }
private void btnRun_Click(object sender, EventArgs e) { /* Create the array containing the adjacency matrix */ double[,] G = new double[Vertices.Count, Vertices.Count]; /* Set the connections and weights based on each edge in the collection */ foreach (Edge edge in Edges) { G[edge.from, edge.to] = edge.weight; } if (this.label4.Text == "A* (A Star) Algorithm") { A_star astar = new A_star(G, 0); dist = astar.g_score; path = astar.came_from; count = 0; count_of_nodes = 0; // nodes = new int[dist.Length]; timer1.Enabled = true; // timer1.Start(); this.btnRun.Enabled = false; // richTextBox1.AppendText("\n\n" + a[Vertices.Count - 1]); if (dist[Vertices.Count - 1] != Double.PositiveInfinity) { BinaryPriorityQueue pa = new BinaryPriorityQueue(); //int count2 = path.Length-1; // shortest_path = new int[count2]; //shortest_path[count2 - 1] = Vertices.Count - 1; // int i = path.Length - 1; // pa.Push(Vertices.Count - 1); // count2 -= 2; for (int i = Vertices.Count - 1; i > -1; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); pa.Push(i); i = path[i]; // continue; } //MessageBox.Show(i.ToString()); pa.Push(i); // shortest_path[i] = path[i]; i = path[i]; //count2 -= 1; //if (path[i] == 0) break; //if (i == 0) break; // count2 -= count2; } // MessageBox.Show("Ang laog:" + pa.Count.ToString()); shortest_path = new int[pa.Count]; int c = 0; for (int i = Vertices.Count - 1; i >= 0; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); shortest_path[c] = i; i = path[i]; c += 1; // continue; } //MessageBox.Show(i.ToString()); shortest_path[c] = i; // shortest_path[i] = path[i]; i = path[i]; c += 1; } } } if (this.label4.Text == "Dijkstra Algorithm") { /* Runs dijkstra */ try { Dijkstra dijk = new Dijkstra(G, 0); dist = dijk.dist; path = dijk.path; count = 0; count_of_nodes = 0; // nodes = new int[dist.Length]; timer1.Enabled = true; // timer1.Start(); this.btnRun.Enabled = false; if (dist[Vertices.Count - 1] != Double.PositiveInfinity) { BinaryPriorityQueue pa = new BinaryPriorityQueue(); //int count2 = path.Length-1; // shortest_path = new int[count2]; //shortest_path[count2 - 1] = Vertices.Count - 1; // int i = path.Length - 1; // pa.Push(Vertices.Count - 1); // count2 -= 2; for (int i = Vertices.Count - 1; i > -1; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); pa.Push(i); i = path[i]; // continue; } //MessageBox.Show(i.ToString()); pa.Push(i); // shortest_path[i] = path[i]; i = path[i]; //count2 -= 1; //if (path[i] == 0) break; //if (i == 0) break; // count2 -= count2; } // MessageBox.Show("Ang laog:" + pa.Count.ToString()); shortest_path = new int[pa.Count]; int c = 0; for (int i = Vertices.Count - 1; i >= 0; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); shortest_path[c] = i; i = path[i]; c += 1; // continue; } //MessageBox.Show(i.ToString()); shortest_path[c] = i; // shortest_path[i] = path[i]; i = path[i]; c += 1; } } // timer1.Start(); // HighlightText(token[1], Color.Red); // for (int o = 0; o < 100000000; o++) //timer1.Stop(); //timer1.Enabled = false; // for (int i = 1; i < dist.Length ; i++) // { // Graphics g = panMap.CreateGraphics(); // nodes[i] = i; // Vertex p = Vertices[i]; // StringFormat distFormat = new StringFormat(); // distFormat.Alignment = StringAlignment.Center; //g.DrawString(dist[d].ToString(), new Font("Verdana", 11), new SolidBrush(Color.White), p.p.X, p.p.Y - 7, distFormat); // g.FillEllipse(new SolidBrush(Color.Red), p.p.X - 25, p.p.Y - 25, 50, 50); // for (int q = 0; q < 100000000; q++); //HighlightText(this.richTextBox2, token[1], Color.Red); //HighlightText(this.richTextBox2, token[0], Color.Black); // } // count_of_nodes = 1; // print_Report(dist, path); // btnstepf.Enabled = true; } catch (ArgumentException err) { MessageBox.Show(err.Message); } } if (this.label4.Text == "Bellman-Ford Algorithm") { /* Runs bellman-ford */ try { BellmanFord bell = new BellmanFord(G, Edges, 0); dist = bell.dist; path = bell.path; count = 0; count_of_nodes = 0; timer1.Enabled = true; this.btnRun.Enabled = false; if (dist[Vertices.Count - 1] != Double.PositiveInfinity) { BinaryPriorityQueue pa = new BinaryPriorityQueue(); //int count2 = path.Length-1; // shortest_path = new int[count2]; //shortest_path[count2 - 1] = Vertices.Count - 1; // int i = path.Length - 1; // pa.Push(Vertices.Count - 1); // count2 -= 2; for (int i = Vertices.Count - 1; i > -1; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); pa.Push(i); i = path[i]; // continue; } //MessageBox.Show(i.ToString()); pa.Push(i); // shortest_path[i] = path[i]; i = path[i]; //count2 -= 1; //if (path[i] == 0) break; //if (i == 0) break; // count2 -= count2; } // MessageBox.Show("Ang laog:" + pa.Count.ToString()); shortest_path = new int[pa.Count]; int c = 0; for (int i = Vertices.Count - 1; i >= 0; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); shortest_path[c] = i; i = path[i]; c += 1; // continue; } //MessageBox.Show(i.ToString()); shortest_path[c] = i; // shortest_path[i] = path[i]; i = path[i]; c += 1; } } /* Prints the shortest distances on the nodes */ /* for (int i = 1; i < dist.Length; i++) { Graphics g = panMap.CreateGraphics(); Vertex p = Vertices[i]; // StringFormat distFormat = new StringFormat(); // distFormat.Alignment = StringAlignment.Center; // g.DrawString(dist[i].ToString(), new Font("Verdana", 11), new SolidBrush(Color.White), p.p.X, p.p.Y - 7, distFormat); g.FillEllipse(new SolidBrush(Color.Red), p.p.X - 25, p.p.Y - 25, 50, 50); for (int q = 0; q < 100000000; q++) ; } */ // print_Report(dist, path); // count_of_nodes = 1; // btnstepf.Enabled = true; // for (int a = 0; a < dist.Length; a++) //{ // MessageBox.Show( dist[a].ToString()); //} } catch (ArgumentException err) { MessageBox.Show(err.Message); } } if (this.label4.Text == "Floyd-Warshall Algorithm") { /* Runs floyd-warshall */ try { FloydWarshall floyd = new FloydWarshall(Edges, Vertices); fdist = floyd.w; fpath = floyd.p; count = 0; count_of_nodes = 0; timer1.Enabled = true; this.btnRun.Enabled = false; if (fdist[0,Vertices.Count - 1] != Double.PositiveInfinity) { BinaryPriorityQueue pa = new BinaryPriorityQueue(); //int count2 = path.Length-1; // shortest_path = new int[count2]; //shortest_path[count2 - 1] = Vertices.Count - 1; // int i = path.Length - 1; // pa.Push(Vertices.Count - 1); // count2 -= 2; for (int i = Vertices.Count - 1; i > -1; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); pa.Push(i); i = fpath[0,i]; // continue; } //MessageBox.Show(i.ToString()); pa.Push(i); // shortest_path[i] = path[i]; i = fpath[0,i]; //count2 -= 1; //if (path[i] == 0) break; //if (i == 0) break; // count2 -= count2; } // MessageBox.Show("Ang laog:" + pa.Count.ToString()); shortest_path = new int[pa.Count]; int c = 0; for (int i = Vertices.Count - 1; i >= 0; ) { if (i == Vertices.Count - 1) { // MessageBox.Show(i.ToString()); shortest_path[c] = i; i = fpath[0,i]; c += 1; // continue; } //MessageBox.Show(i.ToString()); shortest_path[c] = i; // shortest_path[i] = path[i]; i = fpath[0,i]; c += 1; } } //MessageBox.Show(floyd.path(0,3)); // this.richTextBox1.AppendText(floyd.path(0,(int)Convert.ToInt32(cmbDest.SelectedItem))); /* Prints the shortest distances on the nodes */ // for (int i = 0; i < G.Length; i++) // { //Graphics g = panMap.CreateGraphics(); // = floyd.path(); // Vertex p = Vertices[i]; // StringFormat distFormat = new StringFormat(); //distFormat.Alignment = StringAlignment.Center; // g.DrawString(dist[i].ToString(), new Font("Verdana", 11), new SolidBrush(Color.White), p.p.X, p.p.Y - 7, distFormat); // } // print_Report(dist, path, G); // for (int a = 0; a < dist.Length; a++) //{ // MessageBox.Show( dist[a].ToString()); //} } catch (ArgumentException err) { MessageBox.Show(err.Message); } } }