// Keresés
        public override void Kereses()
        {
            Allapot        kezdoAllapot = new Allapot();
            List <Allapot> ut           = new List <Allapot>();

            ut.Add(kezdoAllapot);
            Random random = new Random();

            // Meddig
            while (!ut.Last().celfeltetel())
            {
                int      randomIndex        = random.Next(0, Operatorok.Count);
                Operator valasztottOperator = Operatorok[randomIndex];

                if (valasztottOperator.Elofeltetel(ut.Last()))
                {
                    Allapot ujAllapot = valasztottOperator.BabuMozdit(ut.Last());
                    ut.Add(ujAllapot);
                }
            }

            // Állapotok hozzáadása az útvonalhoz
            foreach (Allapot allapot in ut)
            {
                Utvonal.Add(allapot);
            }
        }
Пример #2
0
        // Keresés
        public override void Kereses()
        {
            Stack <Csomopont> ut = new Stack <Csomopont>();

            ut.Push(new Csomopont(new Allapot(), 0));

            int szamlalo = 0;

            // Meddig
            while (ut.Count > 0 && ut.Peek().Allapot.celfeltetel() == false)
            {
                Csomopont aktualisCsomopont = ut.Peek();

                if (aktualisCsomopont.OperatorIndex < Operatorok.Count)
                {
                    Operator aktualisOperator = Operatorok[aktualisCsomopont.OperatorIndex];
                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllapot   = aktualisOperator.BabuMozdit(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        if (ut.Contains(ujCsomopont) == false)
                        {
                            ut.Push(ujCsomopont);
                        }
                    }
                    aktualisCsomopont.OperatorIndex++;
                }
                else
                {
                    // visszalépés
                    szamlalo++;
                    ut.Pop();
                }
            }

            // Útvonal eltárolása
            if (ut.Count > 0)
            {
                foreach (Csomopont csomopont in ut)
                {
                    Utvonal.Add(csomopont.Allapot);
                }
                Utvonal.Reverse();
            }
        }
Пример #3
0
        public override void Kereses()
        {
            Stack <Csomopont> ut = new Stack <Csomopont>();

            ut.Push(new Csomopont(new Allapot(), 0));

            int szamlalo = 0;

            while (ut.Count > 0 && ut.Peek().Allapot.Celfeltetel() == false)
            {
                Csomopont aktualisCsomopont = ut.Peek();

                if (aktualisCsomopont.OperatorIndex < Operatorok.Count)
                {
                    Operator aktualisOperator = Operatorok[aktualisCsomopont.OperatorIndex];

                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllapot   = aktualisOperator.HuszarAthelyezes(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        if (ut.Contains(ujCsomopont) == false)
                        {
                            ut.Push(ujCsomopont);
                        }
                    }
                    aktualisCsomopont.OperatorIndex++;
                }

                else
                {
                    szamlalo++;
                    ut.Pop();
                }
            }

            if (ut.Count > 0)
            {
                foreach (Csomopont csomopont in ut)
                {
                    Utvonal.Add(csomopont.Allapot);
                }
                Utvonal.Reverse();
            }
        }
Пример #4
0
        public override void Kereses()
        {
            Stack <Csomopont> ut           = new Stack <Csomopont>();
            Csomopont         kezdoAllapot = new Csomopont(new Allapot(), 0);

            ut.Push(kezdoAllapot);
            bool feketeLepet = true;

            while (ut.Count > 0 && !ut.Peek().Allapot.celFeltetel())
            {
                Csomopont aktualisCsomopont = ut.Peek();
                if (this.operatorok.Count > aktualisCsomopont.Index)
                {
                    Operator aktualisOperator = operatorok[aktualisCsomopont.Index];

                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot, feketeLepet))
                    {
                        feketeLepet = aktualisCsomopont.Allapot.Babuk[operatorok[aktualisCsomopont.Index].Melyiket].SzinFekete;
                        Allapot   ujAllapot   = aktualisOperator.Mozgatas(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        if (!ut.Contains(ujCsomopont))
                        {
                            ut.Push(ujCsomopont);
                        }
                    }
                    aktualisCsomopont.Index++;
                }
                else
                {
                    ut.Pop();
                }
            }

            for (int i = 0; i < ut.Count; i++)
            {
                Utvonal.Add(ut.ElementAt(i).Allapot);
                //Console.WriteLine(ut.ElementAt(i));
            }
            Utvonal.Reverse();
            //Console.WriteLine(Utvonal.Count);
        }
Пример #5
0
        public override void Kereses()
        {
            Stack <Csomopont> ut           = new Stack <Csomopont>();
            Csomopont         kezdoAllapot = new Csomopont(new Allapot(), 0);

            ut.Push(kezdoAllapot);
            bool feketeLepet = true;

            while (ut.Count > 0)
            {
                Csomopont aktualisCsomopont = ut.Peek();
                //55 ször fut le
                if (this.operatorok.Count > aktualisCsomopont.Index)
                {
                    //54 szer fur fut le
                    //Eddig jónak tűnik mert az operatorok száma  54 (6*9) és úgy kezdi össze hasonlítani
                    //Fura sokkal kevesebbszer futt le a cw mint az órai kódban

                    Operator aktualisOperator = operatorok[aktualisCsomopont.Index];


                    if (aktualisOperator.Elofeltetel(aktualisCsomopont.Allapot, feketeLepet))
                    {
                        feketeLepet = aktualisCsomopont.Allapot.Babuk[operatorok[aktualisCsomopont.Index].Melyiket].SzinFekete;
                        //operatorok[aktualisCsomopont.Index].
                        //this.elötteMozgatottSzine = aktualisOperator.;
                        // itt valamiért felül lesz írva az aktuális csomopont szerintem memória címzési hiba
                        Allapot   ujAllapot   = aktualisOperator.Mozgatas(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, 0);
                        //!ut.Contains(ujCsomopont) valamiért false lesz és a utvonal .count nem nő
                        if (!ut.Contains(ujCsomopont) && (Utvonal.Count == 0 || ut.Count < Utvonal.Count))
                        {
                            //miért nem pushol elemet bele soha ?
                            ut.Push(ujCsomopont);
                            Console.WriteLine("Pusholtam az uj csomopontot");
                        }
                        else
                        {
                            Console.WriteLine("NEM Pusholtam ");
                        }
                    }
                    //else
                    //{
                    //    Console.WriteLine( "elbuktam az előfeltételt");
                    //}
                    aktualisCsomopont.Index++;
                }
                else
                {
                    Csomopont torol = ut.Pop();
                }
                //megvizsgálom az a célfeltétel ahol vagyok
                if (ut.Count > 0 && ut.Peek().Allapot.celFeltetel())
                {
                    Console.WriteLine("");
                    //megvizsgálom hogy rividebbet találtam e
                    //Console.WriteLine("1.if");
                    if (Utvonal.Count == 0 || ut.Count < Utvonal.Count)
                    {
                        //Console.WriteLine("2.if");
                        Utvonal.Clear();
                        for (int i = 0; i < ut.Count; i++)
                        {
                            Utvonal.Add(ut.ElementAt(i).Allapot);
                            Console.WriteLine("hozzá adtam egy útvonalat");
                        }
                        Utvonal.Reverse();
                    }
                }
            }
        }