Пример #1
0
        private List <EntNodo> ValidaUltimoNodo(List <string> lstDatos, List <EntNodo> lstEntNodo)
        {
            List <EntNodo> lstEntNodoAux = new List <EntNodo>();

            lstEntNodoAux.AddRange(lstEntNodo);
            bool agrega;

            for (int i = 0; i < lstDatos.Count; i++)
            {
                agrega = true;
                string[] datos = lstDatos[i].Split(' ');
                for (int j = 0; j < lstEntNodoAux.Count; j++)
                {
                    if (datos[1] == lstEntNodoAux[j].nombreNodo)
                    {
                        agrega = false;
                        break;
                    }
                }
                if (agrega)
                {
                    EntNodo oEntNodo = CreaNodo(datos[1], lstEntNodoAux.Count + 1);
                    lstEntNodoAux.Add(oEntNodo);
                }
            }
            return(lstEntNodoAux);
        }
Пример #2
0
        private EntNodo CreaNodo(string nombreNodo, int identificador)
        {
            EntNodo oEntNodo = new EntNodo();

            oEntNodo.nombreNodo = nombreNodo;
            oEntNodo.idNodo     = identificador;
            return(oEntNodo);
        }
Пример #3
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);
        }
Пример #4
0
 private List <EntNodo> ActualizaVertices(List <EntNodo> lstEntNodo, int identificador)
 {
     for (int i = 0; i < lstEntNodo.Count; i++)
     {
         EntNodo oEntNodo = lstEntNodo[i];
         for (int j = 0; j < lstEntNodo[i].lstEntVertice.Count; j++)
         {
             if (lstEntNodo[i].lstEntVertice[j].idNodo == identificador)
             {
                 oEntNodo.lstEntVertice.Remove(lstEntNodo[i].lstEntVertice[j]);
                 j--;
             }
         }
     }
     return(lstEntNodo);
 }
Пример #5
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);
 }
Пример #6
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);
 }