예제 #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 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);
        }