Example #1
0
        public EntContenedor AplicaAlgoritmo(EntContenedor oEntContenedor, TipoAlgoritmo eTipoAlgoritmo)
        {
            string camino    = string.Empty;
            string nodoHijo  = string.Empty;
            string nodoPadre = string.Empty;
            int    aux       = 0;

            try
            {
                for (int i = 0; i < oEntContenedor.lstEntNodo.Count; i++)
                {
                    EntNodo oEntNodo = oEntContenedor.lstEntNodo[i];
                    if (i == 0)
                    {
                        oEntNodo.esSeleccionado = true;
                        oEntNodo.nodoPrevio     = oEntNodo.nombreNodo;
                        nodoHijo  = oEntNodo.nombreNodo;
                        nodoPadre = oEntNodo.nombreNodo;
                        if (eTipoAlgoritmo == TipoAlgoritmo.Greedy)
                        {
                            oEntContenedor.lstEntNodo = this.ActualizaVertices(oEntContenedor.lstEntNodo, oEntNodo.idNodo);
                        }
                        oEntContenedor.lstResultados.Add(this.CreaResultado(aux, nodoPadre));
                    }
                    if (oEntNodo.nombreNodo == nodoHijo)
                    {
                        oEntNodo.esSeleccionado = true;
                        oEntNodo.nodoPrevio     = nodoPadre;
                        oEntNodo.peso           = aux;
                        oEntNodo.lstEntVertice  = this.OrdenaLista(oEntNodo.lstEntVertice);
                        for (int j = 0; j < oEntNodo.lstEntVertice.Count; j++)
                        {
                            EntVertice oEntVertice = oEntNodo.lstEntVertice[j];
                            if (j == 0)
                            {
                                i        = oEntVertice.idNodo - 2;
                                aux      = oEntNodo.peso + oEntVertice.peso;
                                nodoHijo = oEntVertice.nombreNodo;
                            }
                            oEntContenedor.lstEntNodo = this.ActualizaVertices(oEntContenedor.lstEntNodo, oEntVertice.idNodo);
                        }
                        nodoPadre = oEntNodo.nombreNodo;
                        if (eTipoAlgoritmo == TipoAlgoritmo.Greedy)
                        {
                            oEntContenedor.lstEntNodo = this.ActualizaVerticesHijos(oEntContenedor.lstEntNodo, oEntNodo);
                        }
                        oEntContenedor.lstResultados.Add(this.CreaResultado(aux, nodoPadre));
                    }
                }
            }
            catch (Exception ex)
            {
                oEntContenedor.mensajeError = ex.Message;
                oEntContenedor.eTipoError   = TipoError.Error;
            }
            return(oEntContenedor);
        }
Example #2
0
        private EntVertice CreaVertice(string nombreNodo, string peso)
        {
            EntVertice oEntVertice = new EntVertice();

            try
            {
                oEntVertice.nombreNodo = nombreNodo;
                oEntVertice.peso       = Convert.ToInt32(peso);
            }
            catch
            {
                throw new ApplicationException("Algunos datos no tienen el formato correcto");
            }
            return(oEntVertice);
        }
Example #3
0
 private List <EntNodo> ActualizaVerticesHijos(List <EntNodo> lstEntNodo, EntNodo oEntNodo)
 {
     for (int i = 0; i < oEntNodo.lstEntVertice.Count; i++)
     {
         EntVertice oEntVertice = oEntNodo.lstEntVertice[i];
         for (int j = 0; j < lstEntNodo.Count; j++)
         {
             for (int x = 0; x < lstEntNodo[j].lstEntVertice.Count; x++)
             {
                 EntVertice oEntVerticeB = lstEntNodo[j].lstEntVertice[x];
                 if (oEntVertice.idNodo == oEntVerticeB.idNodo && oEntVerticeB.idNodo != lstEntNodo.Count)
                 {
                     lstEntNodo[j].lstEntVertice.Remove(oEntVerticeB);
                     x--;
                 }
             }
         }
     }
     return(lstEntNodo);
 }
Example #4
0
 private List <EntNodo> ActualizaIdVertices(List <EntNodo> lstEntNodo)
 {
     for (int i = 0; i < lstEntNodo.Count; i++)
     {
         EntNodo oEntNodo = lstEntNodo[i];
         for (int x = 0; x < lstEntNodo.Count; x++)
         {
             EntNodo oEntNodoB = lstEntNodo[x];
             for (int j = 0; j < oEntNodoB.lstEntVertice.Count; j++)
             {
                 EntVertice oEntVertice = oEntNodoB.lstEntVertice[j];
                 if (oEntVertice.nombreNodo == oEntNodo.nombreNodo)
                 {
                     oEntVertice.idNodo = oEntNodo.idNodo;
                 }
             }
         }
     }
     return(lstEntNodo);
 }