예제 #1
0
        // Recorrido profundidad
        void ButtonDistCClick(object sender, EventArgs e)
        {
            numericUpProfundidad.Maximum = g.getLV().Count;
            RecorridosGrafo rg = new RecorridosGrafo(g);

            listBoxCamino.DataSource = null;
            listBoxCamino.DataSource = rg.getRecorridoProfundidad(g.getLV()[((int)numericUpProfundidad.Value) - 1]);
        }
예제 #2
0
        // Recorrido amplitud
        void ButtonCaminoCClick(object sender, EventArgs e)
        {
            numericUpAnchura.Maximum = g.getLV().Count;
            RecorridosGrafo rg = new RecorridosGrafo(g);

            listBoxCamino.DataSource = null;
            listBoxCamino.DataSource = rg.getRecorridoAmplitud(g.getLV()[((int)numericUpAnchura.Value) - 1]);
        }
예제 #3
0
        //depredadoras
        void ButtonDepreClick(object sender, EventArgs e)
        {
            int selecciono = (int)numericUpDepre.Value;             //Numero de depredadoras a insertar

            numericUpDepre.Maximum = g.getLV().Count;
            Random r = new Random();
            int    posParticula;

            if (selecciono <= totalVertices && selecciono <= disponibles)
            {
                disponibles = disponibles - selecciono;
                if (disponibles >= 0)
                {
                    for (int i = 0; i < selecciono; i++)
                    {
                        // Creo una posicion random para insertar la particula siempre y cuando no este ocupada ya
                        posParticula = r.Next(0, g.getLV().Count);
                        while (vOcupados.Contains(posParticula))
                        {
                            posParticula = r.Next(0, g.getLV().Count);
                        }
                        vOcupados.Add(posParticula);

                        //Inserto el recorrido
                        RecorridosGrafo rg  = new RecorridosGrafo(g);
                        List <Vertice>  rec = new List <Vertice>();
                        rec = rg.getRecorridoAmplitud(g.getLV()[posParticula]);
                        //
                        Particula p = new Particula(posParticula, rec, true);
                        lParticulas.Add(p);
                    }

                    dibujaParticulas();
                    buttonAnimar.Visible = true;
                }
                else
                {
                    MessageBox.Show("No hay más lugares disponibles.");
                }
            }
            else
            {
                MessageBox.Show("No puedes insertar más particulas que los vertives disponibles.");
            }
        }
예제 #4
0
        ///Particulas presa
        void ButtonPresaNormalClick(object sender, EventArgs e)
        {
            if (!esDijk)
            {
                buttonDepre.Enabled = true;
                int selecciono = (int)numericUpNPresa.Value;
                numericUpPosPresa.Maximum = g.getLV().Count;                 //< Para poner una particula en una pos especifica
                numericUpPosDest.Maximum  = g.getLV().Count;
                if (selecciono <= totalVertices && selecciono <= disponibles)
                {
                    disponibles = disponibles - selecciono;
                    if (disponibles >= 0)
                    {
                        if ((int)numericUpPosDest.Value == 0 && (int)numericUpPosPresa.Value == 0 && (int)numericUpNPresa.Value > 0)
                        {
                            //TODO: INSERTO ALEATORIAMENTE
                            Random r = new Random();
                            int    posParticula;
                            for (int i = 0; i < selecciono; i++)
                            {
                                posParticula = r.Next(0, g.getLV().Count);
                                while (vOcupados.Contains(posParticula))
                                {
                                    posParticula = r.Next(0, g.getLV().Count);
                                }
                                vOcupados.Add(posParticula);

                                //Inserto recorrido en profundidad
                                RecorridosGrafo rg  = new RecorridosGrafo(g);
                                List <Vertice>  rec = new List <Vertice>();

                                rec = rg.getRecorridoProfundidad(g.getLV()[posParticula]);

                                Particula p = new Particula(posParticula, rec, false);
                                lParticulas.Add(p);
                            }
                        }
                        else if ((int)numericUpPosPresa.Value != 0 && (int)numericUpPosDest.Value == 0 && (int)numericUpNPresa.Value == 1)
                        {
                            //TODO: INSERTO EN EL ORIGEN SELECCIONADO
                            int posP = (int)numericUpPosPresa.Value - 1;
                            if (vOcupados.Contains(posP))
                            {
                                MessageBox.Show("Ese vértice origen ya esta ocupado");
                                return;
                            }
                            vOcupados.Add(posP);
                            RecorridosGrafo rg  = new RecorridosGrafo(g);
                            List <Vertice>  rec = new List <Vertice>();

                            rec = rg.getRecorridoProfundidad(g.getLV()[posP]);
                            Particula p = new Particula(posP, rec, false);

                            lParticulas.Add(p);
                        }
                        else if ((int)numericUpPosPresa.Value != 0 && (int)numericUpNPresa.Value > 0)
                        {
                            disponibles = disponibles + selecciono;
                            MessageBox.Show("No puedes insertar multiples particulas en el mismo vértice");
                        }
                    }
                    else
                    {
                        MessageBox.Show("No hay más lugares disponibles.");
                    }
                    dibujaParticulas();
                    buttonAnimar.Visible = true;
                }
                else
                {
                    MessageBox.Show("No puedes insertar más particulas que los vértices disponibles.");
                }
            }
            else
            {
                buttonAnimar.Visible = true;

                int posO, posD, posParticula;
                posO = (int)numericUpPosPresa.Value - 1;
                posD = (int)numericUpPosDest.Value - 1;

                if (posD == posO)
                {
                    MessageBox.Show("El origen no puede ser igual al actual destino");
                    return;
                }

                Dijkstra dij = new Dijkstra(g, g.getLV()[posO], g.getLV()[posD]);

                disponibles--;
                posParticula = posO;
                if (vOcupados.Contains(posParticula))
                {
                    MessageBox.Show("Ese vertice ya pertenece a un depredador");
                }
                else
                {
                    vOcupados.Add(posParticula);
                    Particula p = new Particula(posParticula, dij.getLCamino(), false);
                    lParticulas.Add(p);
                    buttonDepre.Enabled = true;
                }
                dibujaParticulas();

                listBoxCamino.DataSource = dij.getLCamino();
            }
        }