Exemple #1
0
 void InOrder(Csomopont cs)
 {
     if (cs != null)
     {
         InOrder(cs.bal);
         Console.WriteLine(cs.tartalom);
         InOrder(cs.jobb);
     }
 }
Exemple #2
0
 void PreOrder(Csomopont cs)
 {
     if (cs != null)
     {
         Console.WriteLine(cs.tartalom);
         PreOrder(cs.bal);
         PreOrder(cs.jobb);
     }
 }
Exemple #3
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();
            }
        }
Exemple #4
0
 void Beszur(ref Csomopont akt, T elem, K kulcs)
 {
     if (akt == null)
     {
         akt = new Csomopont(kulcs, elem);
     }
     else
     {
         if (akt.kulcs.CompareTo(kulcs) < 0)          // Ha az új elem kulcsa nagyobb mint az aktuális elem kulcsa, az elem jobb ágán haladunk tovább. Amennyiben kisebb, a baloldali ágon.
         {
             Beszur(ref akt.jobb, elem, kulcs);
         }
         else if (akt.kulcs.CompareTo(kulcs) > 0)
         {
             Beszur(ref akt.bal, elem, kulcs);
         }
     }
 }
        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();
            }
        }
Exemple #6
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);
        }
        public override void Kereses()
        {
            Queue <Csomopont> nyiltCsucsok = new Queue <Csomopont>();
            List <Csomopont>  zartCsucsok  = new List <Csomopont>();

            nyiltCsucsok.Enqueue(new Csomopont(new Allapot(), null));

            while (nyiltCsucsok.Count > 0 && !nyiltCsucsok.Peek().Allapot.Celfeltetel())
            {
                Csomopont aktualisCsomopont = nyiltCsucsok.Dequeue();
                foreach (Operator op in Operatorok)
                {
                    if (op.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot ujAllapot = op.HuszarAthelyezes(aktualisCsomopont.Allapot);
                        //szülő beállítása
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, aktualisCsomopont);

                        if (!nyiltCsucsok.Contains(ujCsomopont) && !zartCsucsok.Contains(ujCsomopont))
                        {
                            nyiltCsucsok.Enqueue(ujCsomopont);
                        }
                    }
                }
                zartCsucsok.Add(aktualisCsomopont);
            }

            if (nyiltCsucsok.Count > 0)
            {
                Csomopont celCsomopont = nyiltCsucsok.Peek();

                while (celCsomopont != null)
                {
                    this.Utvonal.Add(celCsomopont.Allapot);
                    celCsomopont = celCsomopont.Szulo;
                }

                this.Utvonal.Reverse();
            }
        }
Exemple #8
0
        public override void Kereses()
        {
            Stack <Csomopont> nyiltCsucsok = new Stack <Csomopont>();
            List <Csomopont>  zartCsucsok  = new List <Csomopont>();

            nyiltCsucsok.Push(new Csomopont(new Allapot(), null));

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

                foreach (Operator op in Operatorok)
                {
                    if (op.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllapot   = op.HuszarAthelyezes(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllapot, aktualisCsomopont);

                        if (nyiltCsucsok.Contains(ujCsomopont) == false && zartCsucsok.Contains(ujCsomopont) == false)
                        {
                            nyiltCsucsok.Push(ujCsomopont);
                        }
                    }
                }

                zartCsucsok.Add(aktualisCsomopont);
            }


            if (nyiltCsucsok.Count > 0)
            {
                Csomopont celCsomopont = nyiltCsucsok.Peek();
                while (celCsomopont != null)
                {
                    this.Utvonal.Add(celCsomopont.Allapot);
                    celCsomopont = celCsomopont.Szulo;
                }
                this.Utvonal.Reverse();
            }
        }
Exemple #9
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();
                    }
                }
            }
        }
        // Keresés
        public override void Kereses()
        {
            Stack <Csomopont> nyiltCsucsok = new Stack <Csomopont>();
            List <Csomopont>  zartCsucsok  = new List <Csomopont>();

            nyiltCsucsok.Push(new Csomopont(new Allapot(), null));

            // Meddig
            while (nyiltCsucsok.Count > 0 && !nyiltCsucsok.Peek().Allapot.celfeltetel())
            {
                Csomopont aktualisCsomopont = nyiltCsucsok.Pop();

                List <Csomopont> aktualisGyerekek = new List <Csomopont>();
                foreach (Operator op in Operatorok)
                {
                    if (op.Elofeltetel(aktualisCsomopont.Allapot))
                    {
                        Allapot   ujAllpot    = op.BabuMozdit(aktualisCsomopont.Allapot);
                        Csomopont ujCsomopont = new Csomopont(ujAllpot, aktualisCsomopont);

                        if (!nyiltCsucsok.Contains(ujCsomopont) && !zartCsucsok.Contains(ujCsomopont))
                        {
                            aktualisGyerekek.Add(ujCsomopont);
                        }
                    }
                }

                // Heurisztika alapján történő kiértékelés
                aktualisGyerekek.Sort(
                    delegate(Csomopont cs1, Csomopont cs2)
                {
                    if (cs1.Heurisztika > cs2.Heurisztika)
                    {
                        return(1);
                    }
                    else if (cs1.Heurisztika < cs2.Heurisztika)
                    {
                        return(-1);
                    }
                    else
                    {
                        return(0);
                    }
                });

                // Aktuális gyerekek eltárolása a nyílt csúcsokban
                foreach (Csomopont cs in aktualisGyerekek)
                {
                    nyiltCsucsok.Push(cs);
                }

                zartCsucsok.Add(aktualisCsomopont);
            }

            // Útvonal eltárolása
            if (nyiltCsucsok.Count > 0)
            {
                Csomopont celCsomopont = nyiltCsucsok.Peek();
                while (celCsomopont != null)
                {
                    this.Utvonal.Add(celCsomopont.Allapot);
                    celCsomopont = celCsomopont.Szulo;
                }
                this.Utvonal.Reverse();
            }
        }