Пример #1
0
        public override void buscaCiclos(Nodo nodo, int erdoz, Stack <string> rama, ref List <List <string> > ramas, ref List <List <string> > ciclos)
        {
            List <string> aux;

            nodo.Erdos = erdoz;
            rama.Push(nodo.Nombre);
            aux = rama.ToList();
            ramas.Add(aux);
            //Arbol, Avance, Cruce, Retroceso
            foreach (Arista arista in nodo.Aristas)
            {
                if (arista.Arriba.Erdos == -1)//Arbol
                {
                    arista.Tipo = "Arbol";
                    this.buscaCiclos(arista.Arriba, erdoz + 1, rama, ref ramas, ref ciclos);
                }
                else if (MetodosAuxiliares.NodoEnRamas(nodo.Nombre, arista.Arriba.Nombre, ramas))
                {
                    if (arista.Arriba.Erdos > nodo.Erdos)
                    {
                        arista.Tipo = "Avance";
                    }
                    else if (arista.Arriba.Erdos < nodo.Erdos)
                    {
                        arista.Tipo = "Retroceso";
                        ciclos.Add(this.refinaCiclos(rama, arista.Arriba.Nombre, nodo.Nombre));
                    }
                }
                else
                {
                    arista.Tipo = "Cruce";
                }
            }
            rama.Pop();
        }
Пример #2
0
        public override void bosqueBusquedaProfunda(Nodo nodo, int erdoz, Stack <string> rama, ref List <List <string> > ramas)
        {
            List <string> aux;

            nodo.Erdos = erdoz;
            rama.Push(nodo.Nombre);
            aux = rama.ToList();
            ramas.Add(aux);
            //Arbol, Avance, Cruce, Retroceso
            foreach (Arista arista in nodo.Aristas)
            {
                if (arista.Arriba.Erdos == -1)//Arbol
                {
                    arista.Tipo = "Arbol";
                    bosqueBusquedaProfunda(arista.Arriba, erdoz + 1, rama, ref ramas);
                }
                else if (MetodosAuxiliares.NodoEnRamas(nodo.Nombre, arista.Arriba.Nombre, ramas))
                {
                    if (arista.Arriba.Erdos > nodo.Erdos)
                    {
                        arista.Tipo = "Avance";
                    }
                    else if (arista.Arriba.Erdos < nodo.Erdos)
                    {
                        arista.Tipo = "Retroceso";
                    }
                }
                else
                {
                    arista.Tipo = "Cruce";
                }
            }
            /**/
            rama.Pop();
        }