private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { List <Vertice> Visitados = new List <Vertice>(); Stack <Vertice> Pila = new Stack <Vertice>(); List <Vertice> Posible = new List <Vertice>(); if (CbNumPresas.Text == "" || CbNumDepredadoras.Text == "") { return; } if (ContVertices < int.Parse(CbNumPresas.Text) + int.Parse(CbNumDepredadoras.Text)) { Point Coordenada = new Point(e.X, e.Y); Vertice Cercano = VerticeCercano(Coordenada); if (!Usados.Contains(Cercano)) { if (ContVertices < int.Parse(CbNumPresas.Text)) { Point Punto = new Point(Cercano.getX(), Cercano.getY()); DibujarCirculo(Punto, BrochaPresa, Animacion); pictureBox1.Refresh(); Vertice DestinoElegido = Cercano; do { EleccionDestino Destino = new EleccionDestino(G, Cercano, Grafo); Destino.ShowDialog(); DestinoElegido = Destino.GetDestino(); Pila.Push(Cercano); Visitados.Add(Cercano); Posible.Add(Cercano); DFS(Pila, Visitados, Posible); bool Imposible = true; foreach (Vertice v in Posible) { if (v.Equals(DestinoElegido)) { Imposible = false; break; } } if (Imposible == true) { DestinoElegido = Cercano; } } while (DestinoElegido == Cercano); Dijkstra D = new Dijkstra(G, Cercano, DestinoElegido); D.GetCamino().Reverse(); Agente presa = new Agente(Cercano, ++ContVertices, DestinoElegido, D.GetCamino()); Presa.Add(presa); } else { Pila.Push(Cercano); Visitados.Add(Cercano); Posible.Add(Cercano); DFS(Pila, Visitados, Posible); Agente depredador = new Agente(Cercano, ++ContVertices, null, Posible); Point Punto = new Point(Cercano.getX(), Cercano.getY()); DibujarCirculo(Punto, BrochaDepredador, Animacion); ListaDepredadores.Items.Add(depredador.ToString()); Depredador.Add(depredador); } pictureBox1.Refresh(); this.NumAgentes.Text = ContVertices.ToString(); Usados.Add(Cercano); } } }
private void BtnIngresarAgentes_Click(object sender, EventArgs e) { if (checkBox1.Checked == true) { List <Vertice> lv = G.getLv(); Presa.Clear(); Depredador.Clear(); ListaDepredadores.Items.Clear(); LimpiarBitmap(Animacion, Color.Transparent); pictureBox1.Refresh(); Random random = new Random(); int id = 1; int[] numeros = new int[lv.Count]; int cont = 0; int Elegido = int.Parse(CbNumPresas.Text) + int.Parse(CbNumDepredadoras.Text) + 1; bool BanderaIgual; int Aristas = 0; foreach (Vertice v in lv) { Aristas = Aristas + v.getLa().Count; } if (Aristas == 0) { return; } for (int j = 1; j < Elegido; j++) { int NumeroAleatorio = random.Next(1, lv.Count + 1); BanderaIgual = false; for (int i = 0; i < cont; i++) { if (NumeroAleatorio.Equals(numeros[i])) { BanderaIgual = true; break; } } if (BanderaIgual == false) { for (int i = 0; i < lv.Count; i++) { if (NumeroAleatorio == lv[i].getId()) { List <Vertice> Visitados = new List <Vertice>(); Stack <Vertice> Pila = new Stack <Vertice>(); List <Vertice> Posible = new List <Vertice>(); if (cont < int.Parse(CbNumPresas.Text)) { Vertice DestinoElegido = lv[i]; do { EleccionDestino Destino = new EleccionDestino(G, lv[i], Grafo); Destino.ShowDialog(); DestinoElegido = Destino.GetDestino(); Pila.Push(lv[i]); Visitados.Add(lv[i]); Posible.Add(lv[i]); DFS(Pila, Visitados, Posible); bool Imposible = true; foreach (Vertice v in Posible) { if (v.Equals(DestinoElegido)) { Imposible = false; break; } } if (Imposible == true) { DestinoElegido = lv[i]; } } while (DestinoElegido == lv[i]); Dijkstra D = new Dijkstra(G, lv[i], DestinoElegido); D.GetCamino().Reverse(); Agente presa = new Agente(lv[i], id, DestinoElegido, D.GetCamino()); Point Punto = new Point(lv[i].getX(), lv[i].getY()); DibujarCirculo(Punto, BrochaPresa, Animacion); Presa.Add(presa); } else { Pila.Push(lv[i]); Visitados.Add(lv[i]); Posible.Add(lv[i]); DFS(Pila, Visitados, Posible); Agente depredador = new Agente(lv[i], id, null, Posible); Point Punto = new Point(lv[i].getX(), lv[i].getY()); DibujarCirculo(Punto, BrochaDepredador, Animacion); ListaDepredadores.Items.Add(depredador.ToString()); Depredador.Add(depredador); } pictureBox1.Refresh(); id++; numeros[cont] = NumeroAleatorio; cont++; } } } else { j--; } } this.NumAgentes.Text = cont.ToString(); } else { if (ContVertices == 0) { MessageBox.Show("Haga Click en los Vertices en los Cuales desea Ingresar a las Presas y Depredadoras"); ListaDepredadores.Items.Clear(); Presa.Clear(); Depredador.Clear(); Inserciones = true; } if (Inserciones == true && ContVertices != int.Parse(CbNumPresas.Text) + int.Parse(CbNumDepredadoras.Text)) { if (ContVertices != 0) { MessageBox.Show("Presas o Depredadores Faltantes de Ingresar"); } } else { LimpiarBitmap(Animacion, Color.Transparent); pictureBox1.Refresh(); Inserciones = false; ContVertices = 0; this.NumAgentes.Text = ContVertices.ToString(); Usados.Clear(); } } }