예제 #1
0
        public void Euler()
        {
            bool          camino  = false;
            string        cadena  = "";
            int           pares   = 0;
            int           impares = 0;
            List <Arista> caminos;
            List <NodoP>  circuit;

            foreach (NodoP np in grafo)
            {
                if (np.aristas.Count % 2 == 0)
                {
                    pares++;
                }
                if (np.aristas.Count % 2 != 0)
                {
                    impares++;
                }
            }
            if (pares == grafo.Count) // SI TODOS LOS NODOS SON DE GRADO PAR ENTONCES TIENE CIRCUITO EULERIANO
            {
                circuit  = grafo.circuitoEuleriano();
                circuito = circuit;
                foreach (NodoP np in circuit)
                {
                    cadena += (char)(np.nombre + 64) + " >> ";
                }

                bpar    = true;
                muestra = new MuestraCadena("Circuito Euleriano", cadena);
                muestra.Show();
                muestra.timer1.Tick += Timer1_Tick;
            }

            else if (impares == 2) // SI TIENE DOS NODOS DE GRADO IMPAR, ENTONCES TIENE CAMINO EULERIANO
            {
                circuit  = grafo.caminoEuleriano();
                circuito = circuit;
                foreach (NodoP np in circuit)
                {
                    cadena += (char)(np.nombre + 64) + " >> ";
                }
                bpar    = true;
                muestra = new MuestraCadena("Camino Euleriano", cadena);
                muestra.Show();
                muestra.timer1.Tick += Timer1_Tick;
            }
            else
            {
                MessageBox.Show("No tiene camino ni circuito Euleriano");
            }
        }