public List <Arista> generarCamino(Vertice objetivo)
        {
            caminoString = "";
            List <Arista>    camino = new List <Arista>();
            ElementoDijkstra aux    = candidatos[objetivo.getID() - 1];

            while (aux.getActual().getID() != origen.getID())
            {
                if (aux.getActual() == null || aux.getProveniente() == null)
                {
                    camino.Clear();
                    return(camino);
                }
                camino.Add(encontrarVertice(aux.getActual(), aux.getProveniente()));
                aux = candidatos[aux.getProveniente().getID() - 1];
            }
            camino.Reverse();
            for (int i = 0; i < camino.Count; i++)
            {
                caminoString += camino[i].getOrigen().getID() + " ->";
            }

            caminoString += " " + objetivo.getID();
            return(camino);
        }
        private void factible(ElementoDijkstra aux)
        {
            int total = 0;

            for (int i = 0; i < aux.getActual().getLista().Count; i++)
            {
                total += aux.getPeso() + aux.getActual().getLista()[i].getPonderacion();
                //aux.getActual().getLista()[i]
                if (total < candidatos[aux.getActual().getLista()[i].getDestino().getID() - 1].getPeso())
                {
                    candidatos[aux.getActual().getLista()[i].getDestino().getID() - 1].setPeso(total);
                    candidatos[aux.getActual().getLista()[i].getDestino().getID() - 1].setProveniente(aux.getActual());
                }
                total = 0;
            }
        }
        public ElementoDijkstra seleccion()
        {
            ElementoDijkstra auxiliar = new ElementoDijkstra(infinito + 1, null);
            int j = -1;

            for (int i = 0; i < candidatos.Count; i++)
            {
                if (!candidatos[i].getDefinitivo())
                {
                    if (candidatos[i].getPeso() < auxiliar.getPeso())
                    {
                        auxiliar = candidatos[i];
                        j        = i;
                    }
                }
            }
            candidatos[j].setDefinitivo(true);
            return(auxiliar);
        }
        public Dijkstra(Grafo grafo, Vertice origen)
        {
            this.grafo   = grafo;
            this.origen  = origen;
            candidatos   = new List <ElementoDijkstra>();
            infinito     = sumarValores();
            caminoString = "";
            for (int i = 0; i < grafo.getVertices().Count; i++)
            {
                ElementoDijkstra dks;
                if (i != origen.getID() - 1)
                {
                    dks = new ElementoDijkstra(infinito, grafo.getVertices()[i]);
                }
                else
                {
                    dks = new ElementoDijkstra(0, origen, grafo.getVertices()[i]);
                }

                candidatos.Add(dks);
            }
        }