int F_(state_t n, int alpha, int beta, bool color) { cout << "soy F" << endl; if (n.terminal()) { cout << " soy terminal y valgo: " << n.value() << endl; return n.value() ;//* (color ? 1 : -1); } int m = numeric_limits<signed int>::min(); vector<int> succ_ = n.succ(color); if (succ_.size() != 0) { cout << " voy a jugar: " << succ_.front() << endl; state_t jugada = n.move(color, succ_.front()); cout << " hice jugada " << endl; succ_.erase(succ_.begin()); int valor = G_(jugada, alpha, beta, !color); m = MAX(m, valor); if ( m >= beta) { return m; } for(vector<int>::const_iterator iter=succ_.begin(),limit=succ_.end(); iter!=limit; ++iter) { jugada = n.move(color, *iter); int t = G_(jugada,m,m + 1, !color); if(t > m) { if(t >= beta) { m = t; } else { m = G_(jugada, t, beta, !color); } } if(m >= beta) { return beta; } } } else { return G_(n.move(color, 36), alpha, beta, !color); } return m; }
int G_(state_t n, int alpha, int beta, bool color) { cout << "soy G" << endl; if (n.terminal()) { cout << " soy terminal y valgo: " << n.value() << endl; return n.value() ;//* (color ? 1 : -1);; } int m = numeric_limits<signed int>::max(); vector<int> succ_ = n.succ(color); if (succ_.size() != 0) { state_t jugada = n.move(color, succ_.front()); succ_.erase(succ_.begin()); int valor = F_(jugada, alpha, beta, !color); m = MIN(m, valor); if ( m <= alpha) { return m; } for(vector<int>::const_iterator iter=succ_.begin(),limit=succ_.end(); iter!=limit; ++iter) { cout << " expando: " << *iter << endl; jugada = n.move(color, *iter); int t = F_(jugada,m,m + 1,!color); if(t <= m) { if(t <= alpha) { m = t; } else { m = F_(jugada,alpha,t,!color); } } if(m <= alpha) { return alpha; } } } else { return F_(n.move(color, 36), alpha, beta, !color); } return m; }