Exemplo n.º 1
0
 public Mueve(Cerradura cerradura, String nombre, String estado, String entrada)
 {
     this.cerradura = cerradura;
     this.nombre    = nombre;
     this.estado    = estado;
     this.entrada   = entrada;
 }
Exemplo n.º 2
0
 public void setCerradura(Cerradura cerradura)
 {
     this.cerradura = cerradura;
 }
Exemplo n.º 3
0
        public LinkedList <Mueve> generarAFD(LinkedList <Transicion> transiciones)
        {
            cerraduras = new LinkedList <Cerradura>();
            mueves     = new LinkedList <Mueve>();

            Cerradura cerradura0 = new Cerradura();

            cerradura0.getEstados().AddLast("F");
            cerradura0.setTransiciones(generarCerradura(transiciones, cerradura0.getEstados()));
            cerradura0.getTransiciones().AddLast("F");
            cerraduras.AddLast(cerradura0);
            cerradura0.setNombre("0");
            int estado = 1;

            for (int i = 0; i < cerradura0.getTransiciones().Count(); i++)
            {
                Console.WriteLine(cerradura0.getTransiciones().ElementAt(i));
            }

            for (int i = 0; i < cerraduras.Count(); i++)
            {
                for (int j = 0; j < ArbolBinario.entradas.Count(); j++)
                {
                    LinkedList <string> m = new LinkedList <string>();
                    for (int k = 0; k < cerraduras.ElementAt(i).getTransiciones().Count(); k++)
                    {
                        m = generarMueve(transiciones, ArbolBinario.entradas.ElementAt(j),
                                         cerraduras.ElementAt(i).getTransiciones().ElementAt(k), m);
                    }

                    LinkedList <string> x = new LinkedList <string>();
                    x = generarCerradura(transiciones, m);
                    for (int o = 0; o < m.Count(); o++)
                    {
                        x.AddLast(m.ElementAt(o));
                    }
                    Cerradura cerradura = new Cerradura(m, x);
                    if (x.Count() != 0)
                    {
                        bool      bandera = true;
                        Cerradura temp    = new Cerradura();
                        for (int y = 0; y < cerraduras.Count(); y++)
                        {
                            HashSet <string> a1 = new HashSet <string>();
                            HashSet <string> a2 = new HashSet <string>();
                            for (int t = 0; t < cerraduras.ElementAt(y).getTransiciones().Count(); t++)
                            {
                                a1.Add(cerraduras.ElementAt(y).getTransiciones().ElementAt(t));
                            }

                            for (int t = 0; t < x.Count(); t++)
                            {
                                a2.Add(x.ElementAt(t));
                            }

                            if (a1.SetEquals(a2))
                            {
                                bandera = false;
                                temp    = cerraduras.ElementAt(y);
                            }
                        }
                        if (bandera)
                        {
                            Console.WriteLine("entro");
                            cerradura.setNombre("" + estado);
                            cerraduras.AddLast(cerradura);

                            Mueve mueve = new Mueve(cerradura, cerraduras.ElementAt(i).getNombre(), cerraduras.ElementAt(i).getNombre(), ArbolBinario.entradas.ElementAt(j));
                            estado++;
                            mueves.AddLast(mueve);
                        }
                        else
                        {
                            Console.WriteLine("salio");
                            Mueve mueve = new Mueve(temp, cerraduras.ElementAt(i).getNombre(), cerraduras.ElementAt(i).getNombre(), ArbolBinario.entradas.ElementAt(j));
                            mueves.AddLast(mueve);
                        }
                    }
                }
            }



            Console.WriteLine("-------------------------------------------------");
            cadena  = "";
            cadena += "digraph g{\n";
            cadena += "Graph" + "[label = \"AFD\"] ;\n";
            cadena += "rankdir=LR\n;";
            cadena += "N [shape = doublecircle, fontsize = 1; style = filled fillcolor=white,  fontcolor = white, color = white]; \n";
            cadena += "node [shape = circle; style = filled fillcolor=aquamarine, color = aquamarine]\n";
            if (cerraduras.ElementAt(0).getTransiciones().Contains("L"))
            {
                cadena += "0 [shape = doublecircle; style = filled fillcolor=aquamarine, color = aquamarine];";
            }
            else
            {
                cadena += "0 [shape = circle; style = filled fillcolor=aquamarine]; N->0;\n";
            }
            foreach (var item in mueves)
            {
                Console.WriteLine("Mueve de: " + item.getEstado() + " con: " + item.getEntrada() + " hacia: " + item.getCerradura().getNombre());

                if (item.getEntrada().Equals("\n"))
                {
                    cadena += item.getEstado() + "->" + item.getCerradura().getNombre() + "[label = \"\\\\n\" ];\n";
                }
                else if (item.getEntrada().Equals("\t"))
                {
                    cadena += item.getEstado() + "->" + item.getCerradura().getNombre() + "[label = \"\\\\t\" ];\n";
                }
                else if (item.getEntrada().Equals("\""))
                {
                    cadena += item.getEstado() + "->" + item.getCerradura().getNombre() + "[label = \"\\\"\" ];\n";
                }
                else
                {
                    cadena += item.getEstado() + "->" + item.getCerradura().getNombre() + "[label = \"" + item.getEntrada() + "\" ];\n";
                }
                if (item.getCerradura().getTransiciones().Contains("L"))
                {
                    cadena += item.getCerradura().getNombre() + " [shape = doublecircle; style = filled fillcolor=aquamarine, color = aquamarine];";
                }
            }
            Console.WriteLine("-------------------------------------------------");
            cadena += "}";
            Console.WriteLine(cadena);
            Console.WriteLine("-------------------------------------------------");
            Console.WriteLine("-------------------------------------------------");
            Console.WriteLine("-------------------------------------------------");
            tablaDeTransiciones();
            Console.WriteLine("-------------------------------------------------");
            Console.WriteLine("-------------------------------------------------");
            Console.WriteLine("-------------------------------------------------");

            return(mueves);
        }