示例#1
0
        private Arista aristaSaliente(List <Vertice> S, List <Arista> C)       //< Lista de visitados, lista de aristas
        {
            Arista a_min = new Arista(null, null, double.MaxValue, null);      //Arista dummy
            bool   cumple;

            foreach (Arista a_1 in C)
            {
                cumple = false;
                //me aseguro de que la arista cumpla que no es un ciclo
                if ((S.Contains(a_1.getOrigen()) && !S.Contains(a_1.getDestino())) || (!S.Contains(a_1.getOrigen()) && S.Contains(a_1.getDestino())))
                {
                    cumple = true;
                }
                //Si cumple y es menor es la arista candidato
                if (cumple && a_1.getDistancia() < a_min.getDistancia())
                {
                    a_min = a_1;
                }
            }
            //Elimino la arista de mis candidatos y la regreso
            if (a_min.getDistancia() != double.MaxValue)
            {
                C.Remove(a_min);
            }
            return(a_min);
        }
示例#2
0
        void animarParticulas()
        {
            if (!esDijk)
            {
                bool     vuelta   = false;
                int      vueltas  = 0;
                Graphics graphics = Graphics.FromImage(iTransp);
                Brush    brochaP  = new SolidBrush(Color.BlueViolet);
                Brush    brochaD  = new SolidBrush(Color.Gold);
                Point    point    = new Point();

                Particula p = new Particula();
                while (lParticulas.Count > 0)
                {
                    if (vueltas == 2)
                    {
                        vuelta = true;
                    }
                    for (int i = 0; i < lParticulas.Count; i++)
                    {
                        p = lParticulas[i];
                        p.setIndPos(p.getContador());

                        Arista  a   = new Arista();
                        Vertice ori = p.getLVertices()[p.getCOri()];
                        Vertice des = p.getLVertices()[p.getCDes()];
                        for (int j = 0; j < ori.getLA().Count; j++)
                        {
                            if (ori.getLA()[j].getDestino().getId() == des.getId())
                            {
                                a = ori.getLA()[j];
                                break;
                            }
                        }

                        if (p.getIndPos() < a.getListaP().Count)                         //Si la particula no ha terminado los puntos en la arista donde esta
                        {
                            Point po = a.getListaP()[p.getIndPos()];
                            if (p.esDepre() == true)
                            {
                                point.X = po.X;
                                point.Y = po.Y;
                                p.setPosActual(point);
                                graphics.FillEllipse(brochaD, po.X - p.getR(), po.Y - p.getR(), 2 * p.getR(), 2 * p.getR());
                            }
                            else
                            {
                                point.X = po.X;
                                point.Y = po.Y;
                                p.setPosActual(point);
                                graphics.FillEllipse(brochaP, po.X - p.getR(), po.Y - p.getR(), 2 * p.getR(), 2 * p.getR());
                            }
                            //COMPROBAR COLISIONES
                            if (vuelta)
                            {
                                Particula p1 = new Particula();
                                Particula p2 = new Particula();

                                for (int z = 0; z < lParticulas.Count; z++)
                                {
                                    for (int x = 0; x < lParticulas.Count; x++)
                                    {
                                        if (z < lParticulas.Count && x < lParticulas.Count)
                                        {
                                            p1 = lParticulas[z];                                             // Es depredadora
                                            p2 = lParticulas[x];                                             // Es presa
                                        }

                                        if (p1.esDepre() && !p2.esDepre())
                                        {
                                            if (p1.getPosActual() == p2.getPosActual() ||
                                                (p1.getPosActual().X - 3 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 3 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 2 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X - 2 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||                                           //Aqui ya captura en x lineal
                                                (p1.getPosActual().X - 4 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 4 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 1 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X - 1 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||

                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 1 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 2 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 3 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 4 == p2.getPosActual().Y) ||                                           //Aqui ya captura en Y lineal
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 1 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 2 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 3 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 4 == p2.getPosActual().Y) ||

                                                (p1.getPosActual().Y + 1 == p2.getPosActual().Y&& p1.getPosActual().X - 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 2 == p2.getPosActual().Y&& p1.getPosActual().X - 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 3 == p2.getPosActual().Y&& p1.getPosActual().X - 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 4 == p2.getPosActual().Y&& p1.getPosActual().X - 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y - 1 == p2.getPosActual().Y&& p1.getPosActual().X + 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 2 == p2.getPosActual().Y&& p1.getPosActual().X + 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 3 == p2.getPosActual().Y&& p1.getPosActual().X + 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 4 == p2.getPosActual().Y&& p1.getPosActual().X + 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y + 1 == p2.getPosActual().Y&& p1.getPosActual().X + 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 2 == p2.getPosActual().Y&& p1.getPosActual().X + 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 3 == p2.getPosActual().Y&& p1.getPosActual().X + 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 4 == p2.getPosActual().Y&& p1.getPosActual().X + 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y - 1 == p2.getPosActual().Y&& p1.getPosActual().X - 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 2 == p2.getPosActual().Y&& p1.getPosActual().X - 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 3 == p2.getPosActual().Y&& p1.getPosActual().X - 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 4 == p2.getPosActual().Y&& p1.getPosActual().X - 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y - 1 == p2.getPosActual().Y&& p1.getPosActual().X - 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 2 == p2.getPosActual().Y&& p1.getPosActual().X - 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 3 == p2.getPosActual().Y&& p1.getPosActual().X - 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 4 == p2.getPosActual().Y&& p1.getPosActual().X - 4 == p2.getPosActual().X)
                                                )
                                            {
                                                p1.setR(p1.getR() + 5);
                                                lParticulas.Remove(p2);
                                                //i--;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else                           //si ya termino cambio el origen
                        {
                            p.setCOri(p.getCOri() + 1);
                            p.setCDes(p.getCDes() + 1);
                            p.setContador(0);
                            if (p.getCDes() == p.getLVertices().Count)                             //Si el destino es el ultimo en la lista elimino la particula
                            {
                                point.X = 0;
                                point.Y = 0;
                                p.setPosActual(point);
                                lParticulas.Remove(p);
                                i--;
                            }
                        }
                        p.setContador(p.getContador() + 5);
                    }
                    pictureImageGrafo.Refresh();
                    graphics.Clear(Color.Transparent);
                    vueltas++;
                }
                totalVertices = disponibles = g.getLV().Count;                 //< Reinicio el contador para insertar más
                vOcupados.Clear();
            }
            else
            {
                bool vuelta  = false;
                bool viva    = true;
                bool refresh = true;
                int  vueltas = 0;
                //labelLlego.Text = "--";
                Graphics graphics = Graphics.FromImage(iTransp);
                Brush    brochaP  = new SolidBrush(Color.BlueViolet);
                Brush    brochaD  = new SolidBrush(Color.Gold);
                Point    point    = new Point();

                Particula p = new Particula();
                while (lParticulas.Count > 0)
                {
                    if (vueltas == 2)
                    {
                        vuelta = true;
                    }
                    if (!viva)
                    {
                        MessageBox.Show("-=LA PARTICULA FUE DEVORADA=-");
                        totalVertices = disponibles = g.getLV().Count;                         //< Reinicio el contador para insertar más
                        vOcupados.Clear();
                        break;
                    }
                    for (int i = 0; i < lParticulas.Count; i++)
                    {
                        p = lParticulas[i];
                        p.setIndPos(p.getContador());

                        Arista  a   = new Arista(null, null, double.MaxValue, null);
                        Vertice ori = p.getLVertices()[p.getCOri()];
                        Vertice des = p.getLVertices()[p.getCDes()];

                        for (int j = 0; j < ori.getLA().Count; j++)
                        {
                            if (ori.getLA()[j].getDestino() == des)
                            {
                                a = ori.getLA()[j];
                                break;
                            }
                        }

                        if (p.getIndPos() < a.getListaP().Count)                         //Si la particula no ha terminado los puntos en la arista donde esta
                        {
                            Point po = a.getListaP()[p.getIndPos()];
                            if (p.esDepre() == true)
                            {
                                point.X = po.X;
                                point.Y = po.Y;
                                p.setPosActual(point);
                                graphics.FillEllipse(brochaD, po.X - p.getR(), po.Y - p.getR(), 2 * p.getR(), 2 * p.getR());
                            }
                            else
                            {
                                point.X = po.X;
                                point.Y = po.Y;
                                p.setPosActual(point);
                                graphics.FillEllipse(brochaP, po.X - p.getR(), po.Y - p.getR(), 2 * p.getR(), 2 * p.getR());
                            }
                            //COMPROBAR COLISIONES
                            if (vuelta)
                            {
                                Particula p1 = new Particula();
                                Particula p2 = new Particula();

                                for (int z = 0; z < lParticulas.Count; z++)
                                {
                                    for (int x = 0; x < lParticulas.Count; x++)
                                    {
                                        if (z < lParticulas.Count && x < lParticulas.Count)
                                        {
                                            p1 = lParticulas[z];                                             // Es depredadora
                                            p2 = lParticulas[x];                                             // Es presa
                                        }

                                        if (p1.esDepre() && !p2.esDepre())
                                        {
                                            if (p1.getPosActual() == p2.getPosActual() ||
                                                (p1.getPosActual().X - 3 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 3 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 2 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X - 2 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||                                           //Aqui ya captura en x lineal
                                                (p1.getPosActual().X - 4 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 4 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X + 1 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X - 1 == p2.getPosActual().X&& p1.getPosActual().Y == p2.getPosActual().Y) ||

                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 1 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 2 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 3 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y + 4 == p2.getPosActual().Y) ||                                           //Aqui ya captura en Y lineal
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 1 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 2 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 3 == p2.getPosActual().Y) ||
                                                (p1.getPosActual().X == p2.getPosActual().X&& p1.getPosActual().Y - 4 == p2.getPosActual().Y) ||

                                                (p1.getPosActual().Y + 1 == p2.getPosActual().Y&& p1.getPosActual().X - 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 2 == p2.getPosActual().Y&& p1.getPosActual().X - 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 3 == p2.getPosActual().Y&& p1.getPosActual().X - 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 4 == p2.getPosActual().Y&& p1.getPosActual().X - 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y - 1 == p2.getPosActual().Y&& p1.getPosActual().X + 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 2 == p2.getPosActual().Y&& p1.getPosActual().X + 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 3 == p2.getPosActual().Y&& p1.getPosActual().X + 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 4 == p2.getPosActual().Y&& p1.getPosActual().X + 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y + 1 == p2.getPosActual().Y&& p1.getPosActual().X + 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 2 == p2.getPosActual().Y&& p1.getPosActual().X + 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 3 == p2.getPosActual().Y&& p1.getPosActual().X + 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y + 4 == p2.getPosActual().Y&& p1.getPosActual().X + 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y - 1 == p2.getPosActual().Y&& p1.getPosActual().X - 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 2 == p2.getPosActual().Y&& p1.getPosActual().X - 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 3 == p2.getPosActual().Y&& p1.getPosActual().X - 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 4 == p2.getPosActual().Y&& p1.getPosActual().X - 4 == p2.getPosActual().X) ||

                                                (p1.getPosActual().Y - 1 == p2.getPosActual().Y&& p1.getPosActual().X - 1 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 2 == p2.getPosActual().Y&& p1.getPosActual().X - 2 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 3 == p2.getPosActual().Y&& p1.getPosActual().X - 3 == p2.getPosActual().X) ||
                                                (p1.getPosActual().Y - 4 == p2.getPosActual().Y&& p1.getPosActual().X - 4 == p2.getPosActual().X))
                                            {
                                                p1.setR(p1.getR() + 5);
                                                lParticulas.Clear();
                                                //TODO: Si se comieron la presa detengo todo el proceso
                                                numericUpPosPresa.Enabled = true;
                                                viva = false;
                                                MessageBox.Show("-=LA PARTICULA FUE DEVORADA=-");
                                                totalVertices = disponibles = g.getLV().Count;                                                 //< Reinicio el contador para insertar más
                                                vOcupados.Clear();
                                                pictureImageGrafo.Refresh();
                                                graphics.Clear(Color.Transparent);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else                           //si ya termino cambio el origen
                        {
                            p.setCOri(p.getCOri() + 1);
                            p.setCDes(p.getCDes() + 1);
                            p.setContador(0);
                            int auxPos = p.getLVertices()[p.getCDes() - 1].getId();
                            if (p.getCDes() == p.getLVertices().Count)                             //Si el destino es el ultimo en la lista elimino la particula
                            {
                                point.X = 0;
                                point.Y = 0;
                                p.setPosActual(point);
                                lParticulas.Clear();

                                //TODO: Si llego al final el vertice final será el nuevo origen, deberia cambiar los numericUp
                                viva = false;
                                //MessageBox.Show("La presa llego a su destino, seleccione uno nuevo");
                                numericUpPosPresa.Value   = auxPos;
                                numericUpPosPresa.Enabled = false;
                                refresh = false;
                                MessageBox.Show("-=LA PARTICULA LLEGO A SU DESTINO=-");
                                totalVertices = disponibles = g.getLV().Count;                                 //< Reinicio el contador para insertar más
                                vOcupados.Clear();

                                buttonDepre.Enabled = false;
                            }
                        }
                        p.setContador(p.getContador() + 5);
                    }
                    if (refresh)
                    {
                        pictureImageGrafo.Refresh();
                        graphics.Clear(Color.Transparent);
                    }
                    vueltas++;
                }
            }
        }
示例#3
0
        public void insertaArista(Vertice destino, Vertice origen, double distanciaA, List <Point> lpo)
        {
            Arista a = new Arista(destino, origen, distanciaA, lpo);

            la.Add(a);
        }
示例#4
0
        void hazPrim(Vertice origen)
        {
            double pesoTotal = 0;

            bmpGrafo = new Bitmap(imgGrafo);
            List <Arista>  C         = new List <Arista>(graf.getLA()); //< Candidatos, con la lista de aristas
            List <Arista>  PSolucion = new List <Arista>();             //< Solucion con las posibles aristas
            List <Vertice> visitados = new List <Vertice>();            //< Vertices que ya fueron visitados

            visitados.Add(origen);

            if (C.Count == 0)
            {
                return;
            }

            C.Sort(
                delegate(Arista p1, Arista p2)
            {
                return(p1.getDistancia().CompareTo(p2.getDistancia()));
            }
                );

            while (visitados.Count < graf.getLV().Count)
            {
                Arista a = new Arista();

                a = aristaSaliente(visitados, C);                 //Me regresa la arista menor
                //Si me regresa una arista dummy es porque termino una isla y no hay más vertices
                if (a.getDistancia() == double.MaxValue)
                {
                    visitados.Add(buscarIsla(visitados, C));                     //Busco una "isla", que me regresa un vertice y lo añado a visitadis
                    continue;
                }
                PSolucion.Add(a);                // Añado a mi solucion la arista
                //Añado el vertice de la arista dependiendo de cual haga falta
                if (visitados.Contains(a.getOrigen()))
                {
                    visitados.Add(a.getDestino());
                }
                else
                {
                    visitados.Add(a.getOrigen());
                }
            }

            //Dibujo las aristas de un color diferente y sumo las distancias de todas mis aristas para marcar el peso total del arbol
            Graphics gra   = Graphics.FromImage(bmpGrafo);
            Pen      lapiz = new Pen(Color.Blue, 10);

            for (int i = 0; i < PSolucion.Count; i++)
            {
                try{
                    gra.DrawLine(lapiz, PSolucion[i].getOrigen().getCircle().getP().X, PSolucion[i].getOrigen().getCircle().getP().Y, PSolucion[i].getDestino().getCircle().getP().X, PSolucion[i].getDestino().getCircle().getP().Y);
                }catch (Exception ex) {}
            }

            foreach (Arista a in PSolucion)
            {
                pesoTotal += a.getDistancia();
            }

            listBoxPRIM.DataSource = null;
            listBoxPRIM.DataSource = PSolucion;

            labelPesoPRIM.Text     = "Peso Total: " + Math.Round(pesoTotal, 4);
            pictureImagePRIM.Image = bmpGrafo;
        }
示例#5
0
        public void hazKruskal()
        {
            bmpGrafo = new Bitmap(imgGrafo);
            int    conta     = 0;
            double pesoTotal = 0;

            List <Arista>          C        = new List <Arista>(graf.getLA()); //Lista de aristas
            List <Arista>          solucion = new List <Arista>();
            List <List <Vertice> > CC       = new List <List <Vertice> >();    //Lista de lista de vertices, conjunto conexo

            C.Sort(
                delegate(Arista p1, Arista p2)
            {
                return(p1.getDistancia().CompareTo(p2.getDistancia()));
            }
                );

            //Leno mi lista de compoentes conexos con una lista individual de vertices
            for (int i = 0; i < graf.getLV().Count; i++)
            {
                List <Vertice> comp = new List <Vertice>();
                comp.Add(graf.getLV()[i]);

                CC.Add(comp);
            }

            while (conta < graf.getLA().Count)
            {
                Arista a = new Arista();

                if (C.Count == 0)
                {
                    return;
                }

                a = C[conta];                 //Selecciono la arista que va en mi contador, siempre será la menor

                conta++;

                //Factible
                a.getOrigen();
                a.getDestino();
                int e1 = 0, e2 = 0;

                for (int i = 0; i < CC.Count; i++)
                {
                    List <Vertice> laux = new List <Vertice>();
                    laux = CC[i];

                    //Obtengo los rangos para crear los componenetes conexos y hacerlos una lista
                    for (int j = 0; j < CC[i].Count; j++)
                    {
                        if (a.getOrigen() == laux[j])
                        {
                            e1 = i;
                        }
                        if (a.getDestino() == laux[j])
                        {
                            e2 = i;
                        }
                    }
                }

                //Concateno los componentes conexos
                if (e1 != e2)
                {
                    solucion.Add(a);
                    CC[e1].AddRange(CC[e2]);
                    CC.RemoveAt(e2);
                }
            }

            listBoxKRUSKAL.DataSource = null;
            listBoxKRUSKAL.DataSource = solucion;

            //Dibujo las aristas restantes en mi slución
            Graphics gra   = Graphics.FromImage(bmpGrafo);
            Pen      lapiz = new Pen(Color.Blue, 10);

            for (int i = 0; i < solucion.Count; i++)
            {
                gra.DrawLine(lapiz, solucion[i].getOrigen().getCircle().getP().X, solucion[i].getOrigen().getCircle().getP().Y, solucion[i].getDestino().getCircle().getP().X, solucion[i].getDestino().getCircle().getP().Y);
            }

            foreach (Arista a in solucion)
            {
                pesoTotal += a.getDistancia();
            }

            labelPesoKRUSKAL.Text = "Peso Total: " + Math.Round(pesoTotal, 4);

            pictureImageKRUSKAL.Image = bmpGrafo;
        }