コード例 #1
0
        public override List <string> circuitoEuleriano()
        {
            List <string> recorrido;
            Nodo          actual;
            Nodo          siguiente;
            Arista        arista;
            List <Arista> recorridas;

            recorrido = new List <string>();;
            this.setGrados();
            recorridas = new List <Arista>();
            actual     = this[0];
            // Console.Write(actual.Nombre);
            do
            {
                recorrido.Add(actual.Nombre);
                siguiente = MetodosAuxiliares.siguienteEnCircuito(actual, recorridas);
                arista    = MetodosAuxiliares.encuentraArista(siguiente, actual);
                recorridas.Add(arista);
                siguiente.GradoSalida--;
                arista = MetodosAuxiliares.encuentraArista(actual, siguiente);
                recorridas.Add(arista);
                actual.GradoSalida--;
                actual = siguiente;
            } while (actual.grados() != 0);
            recorrido.Add(actual.Nombre);
            return(recorrido);
        }
コード例 #2
0
        public override bool componentesSeparados()
        {
            bool separados;

            separados = false;
            Nodo          actual;
            Nodo          siguiente;
            Arista        arista;
            List <Arista> recorridas;

            this.setGrados();
            recorridas = new List <Arista>();
            actual     = this[0];
            do
            {
                siguiente = MetodosAuxiliares.siguienteEnCaminoNoDir(actual, recorridas);
                arista    = MetodosAuxiliares.encuentraArista(siguiente, actual);
                recorridas.Add(arista);
                siguiente.GradoSalida--;
                arista = MetodosAuxiliares.encuentraArista(actual, siguiente);
                recorridas.Add(arista);
                actual.GradoSalida--;
                actual = siguiente;
            } while (actual.grados() != 0);
            if (this.Aristas != recorridas.Count)
            {
                separados = true;
            }
            return(separados);
        }
コード例 #3
0
        public override List <string> caminoEuleriano()
        {
            List <string> recorrido;
            List <string> recorridoAux;
            List <Arista> recorridas;
            Nodo          actual;
            Nodo          siguiente;
            Arista        arista;

            recorrido    = new List <string>();
            recorridoAux = new List <string>();
            this.setGrados();
            recorridas = new List <Arista>();
            actual     = MetodosAuxiliares.inicioDeCaminoNoDir(this);
            do
            {
                recorridoAux.Add(actual.Nombre);
                do
                {
                    siguiente = MetodosAuxiliares.siguienteEnCaminoNoDir(actual, recorridas);
                    arista    = MetodosAuxiliares.encuentraArista(siguiente, actual);
                    recorridas.Add(arista);
                    siguiente.GradoSalida--;
                    arista = MetodosAuxiliares.encuentraArista(actual, siguiente);
                    recorridas.Add(arista);
                    actual.GradoSalida--;
                    actual = siguiente;
                    recorridoAux.Add(actual.Nombre);
                } while (actual.GradoSalida != 0);
                recorrido    = MetodosAuxiliares.sumaListas(recorridoAux, recorrido);
                recorridoAux = new List <string>();
                if (recorridas.Count != this.Aristas)
                {
                    actual    = base.BuscaNodo(recorrido.First().ToString());
                    recorrido = MetodosAuxiliares.subList(recorrido, 1);
                }
            } while (recorridas.Count != this.Aristas);
            return(recorrido);
        }
コード例 #4
0
        public override List <string> circuitoEuleriano()
        {
            Nodo          actual;     //Nodo actual en la secuencia
            Nodo          siguiente;  //Nodo siguiente en la secuencia
            Arista        arista;     //Arista recorrida
            List <string> recorrido;  //Lista que contendra la secuencia del circuito
            List <Arista> recorridas; //Lista de aristas recorridas

            recorrido  = new List <string>();
            recorridas = new List <Arista>();
            this.setGrados(); //inicializa el valor de los grados
            actual = this[0]; //Inicia el recorrido en el primer nodo que se inserto en el grafo
            do
            {
                recorrido.Add(actual.Nombre);
                siguiente = MetodosAuxiliares.siguienteEnCircuito(actual, recorridas); //busca el siguiente  nodo en la secuencia
                arista    = MetodosAuxiliares.encuentraArista(actual, siguiente);      //Encuentra la arista que apunta al nodo
                recorridas.Add(arista);                                                //Añade a la arista a la lista para no volver a ser recorrida
                actual.GradoSalida--;                                                  //Reduce en uno el grado de salida
                actual = siguiente;                                                    //El apuntador del nodo actual pasa a tener el valor del siguiente en la secuencia
            } while (actual.GradoSalida != 0);                                         //El ciclo se mantiene hasta que el nodo
            recorrido.Add(actual.Nombre);                                              //Añade el ultimo nombre al nodo de la secuencia
            return(recorrido);
        }