コード例 #1
0
        public static Potez MinMax(ContextIksOks c, int depth)
        {
            int alfa = int.MinValue;
            int beta = int.MaxValue;

            return(AlfaBeta(alfa, beta, c, depth));
        }
コード例 #2
0
        public static Potez AlfaBeta(int alfa, int beta, ContextIksOks c, int depth)
        {
            List <Potez> sviMoguciPotezi = c.GetListaMogucihPoteza();
            Potez        najPotez        = new Potez();

            int najPotezVrednost = int.MinValue;

            if (c.NaPotezu == 2)
            {
                najPotezVrednost = int.MaxValue;
            }

            if (depth == 0 || c.GetListaMogucihPoteza().Count == 0)
            {
                c.Value = c.Evaluate();
                return(null);
            }

            foreach (Potez potez in sviMoguciPotezi)
            {
                MinMax(potez.NarednoStanje, depth - 1);
                int trenutniNajPotez = potez.NarednoStanje.Value;
                if (c.NaPotezu == 1)
                {
                    if (najPotezVrednost < trenutniNajPotez)
                    {
                        najPotezVrednost = trenutniNajPotez;
                        najPotez         = potez;
                    }
                    alfa = Math.Max(alfa, najPotezVrednost);
                    if (beta <= alfa)
                    {
                        break;
                    }
                }
                else
                {
                    trenutniNajPotez = potez.NarednoStanje.Value;
                    if (najPotezVrednost > trenutniNajPotez)
                    {
                        najPotezVrednost = trenutniNajPotez;
                        najPotez         = potez;
                    }
                    beta = Math.Min(beta, najPotezVrednost);
                    if (beta <= alfa)
                    {
                        break;
                    }
                }
            }
            c.Value = najPotezVrednost;
            return(najPotez);
        }