public void DFS(Stack <Vertice> Pila, List <Vertice> Visitados, List <Vertice> Camino)
        {
            Vertice v_act = Pila.Pop();

            foreach (Arista a in v_act.getLa())
            {
                bool Band = false;
                foreach (Vertice v in Visitados)
                {
                    if (v.getId() == a.getVertex().getId())
                    {
                        Band = true;
                        break;
                    }
                }
                if (Band == false)
                {
                    if (ArmPrim == true)
                    {
                        foreach (Vertice Ref in ArbolPrim.getLv())
                        {
                            if (a.getVertex().getId() == Ref.getId())
                            {
                                Visitados.Add(a.getVertex());
                                Pila.Push(Ref);
                                Camino.Add(a.getVertex());
                                DFS(Pila, Visitados, Camino);
                                Camino.Add(a.getVertexOrigen());
                            }
                        }
                    }
                    if (ArmKruskal == true)
                    {
                        foreach (Vertice Ref in ArbolKruskal.getLv())
                        {
                            if (a.getVertex().getId() == Ref.getId())
                            {
                                Visitados.Add(a.getVertex());
                                Pila.Push(Ref);
                                Camino.Add(a.getVertex());
                                DFS(Pila, Visitados, Camino);
                                Camino.Add(a.getVertexOrigen());
                            }
                        }
                    }
                }
            }
        }
        private void BtnKruskal_Click(object sender, EventArgs e)
        {
            ArmKruskal = true;
            ArmPrim    = false;
            pictureBox1.BackgroundImage       = ARM;
            pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
            List <Vertice>  Visitados = new List <Vertice>();
            Stack <Vertice> Pila      = new Stack <Vertice>();

            CaminoKruskal = new List <Vertice>();
            int Buscado = comboBox1.SelectedIndex + 1;

            foreach (Vertice v in ArbolKruskal.getLv())
            {
                if (Buscado == v.getId())
                {
                    Pila.Push(v);
                    Visitados.Add(v);
                    CaminoKruskal.Add(v);
                    break;
                }
            }
            DFS(Pila, Visitados, CaminoKruskal);
            while (Visitados.Count != ArbolKruskal.getLv().Count)
            {
                foreach (Vertice v in ArbolKruskal.getLv())
                {
                    bool Band = false;
                    foreach (Vertice Bus in Visitados)
                    {
                        if (v.getId() == Bus.getId())
                        {
                            Band = true;
                            break;
                        }
                    }
                    if (Band == false)
                    {
                        Visitados.Add(v);
                        Pila.Push(v);
                        CaminoKruskal.Add(v);
                        DFS(Pila, Visitados, CaminoKruskal);
                    }
                }
            }
            Graphics graphics = Graphics.FromImage(copia);

            LimpiarBitmap(copia, Color.Transparent);
            pictureBox1.Image = copia;
            BrochaAgente      = new SolidBrush(Color.Red);
            List <Point> Linea = new List <Point>();
            Point        punto = new Point();
            int          b, c;

            listBox1.Items.Clear();
            LlenalistBox();
            listBox1.Update();
            Agente agente = new Agente(CaminoKruskal[0], 1, CaminoKruskal);
            bool   Vuelta = false;

            while (true)
            {
                b = agente.GetcontAristas();
                bool Encontrado = false;
                foreach (Arista a in agente.getCamino()[b].getLa())
                {
                    if (b < CaminoKruskal.Count)
                    {
                        if (a.getVertex() == agente.getCamino()[b + 1] && b == 0)
                        {
                            bool Reversa = true;
                            foreach (Arista rev in AristasKruskal)
                            {
                                if (Buscado == rev.getVertexOrigen().getId())
                                {
                                    Reversa = false;
                                    Linea   = a.getLinea();
                                    break;
                                }
                            }
                            if (Reversa == true && Vuelta == false)
                            {
                                Linea = a.getLinea();
                                Linea.Reverse();
                                Vuelta = true;
                            }
                            Encontrado = true;
                        }
                        if (a.getVertex() == agente.getCamino()[b + 1] && b != 0)
                        {
                            if (b + 2 == CaminoKruskal.Count && Vuelta == true)
                            {
                                Linea = a.getLinea();
                                Linea.Reverse();
                                Vuelta = false;
                            }
                            else
                            {
                                Linea = a.getLinea();
                            }
                            Encontrado = true;
                        }
                    }
                }
                if (Encontrado == false)
                {
                    agente.SetcontPunto(Linea.Count - 5);
                }
                c = agente.GetcontPuntos();
                if (Linea.Count - 5 <= c)
                {
                    c = Linea.Count - 1;
                }
                punto = Linea[c];
                pictureBox1.Refresh();
                LimpiarBitmap(copia, Color.Transparent);
                DibujarCirculo(punto, BrochaAgente, copia);
                DibujarId(punto, drawBrush, copia, agente.getId());
                agente.SetcontPunto(agente.GetcontPuntos() + 7);
                if (agente.GetcontPuntos() >= Linea.Count)
                {
                    agente.SetcontPunto(0);
                    agente.SetcontAristas(agente.GetcontAristas() + 1);
                }
                if (agente.GetcontAristas() + 1 == CaminoKruskal.Count)
                {
                    DibujarCirculo(punto, BrochaAgente, copia);
                    break;
                }
            }
            pictureBox1.Refresh();
        }