public static Potez MinMax(ContextIksOks c, int depth) { int alfa = int.MinValue; int beta = int.MaxValue; return(AlfaBeta(alfa, beta, c, depth)); }
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); }