类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
各位大大,我在看王小春写的书时,a-b 剪枝发的递归实在想不清楚,希望哪位高人解释一下:
int CAlphaBetaEngine::alphabeta(int depth, int alpha, int beta)
{
int score;
int Count,i;
BYTE type;
i = IsGameOver(CurPosition, depth);
if (i != 0)
return i;
if (depth <= 0) //叶子节点取估值
return m_pEval->Eveluate(CurPosition, (m_nMaxDepth-depth)%2);
Count = m_pMG->CreatePossibleMove(CurPosition, depth, (m_nMaxDepth-depth)%2);
for (i=0;i<Count;i++)
{
type = MakeMove(&m_pMG->m_MoveList[depth][i]);
score = -alphabeta(depth - 1, -beta, -alpha);
UnMakeMove(&m_pMG->m_MoveList[depth][i],type);
if (score > alpha)
{
alpha = score;
if(depth == m_nMaxDepth)
m_cmBestMove = m_pMG->m_MoveList[depth][i];
}
if (alpha >= beta)
break;
}
return alpha;
}
语句score = -alphabeta(depth - 1, -beta, -alpha);到底时如何实现递归的,对于极大和极小的两种情时如何做到都适用的。
网友回答:
max=-min{-vi}
min=-max{-vi}
所以两种情况的形式其实是一样的.