前面讲到了剪枝算法作为一种对于极大极小博弈算法的优化,是提高效率的一种好办法。但是我们不满足于此。因为一般的普通人是可以思考到6层以上。为了对效率进行提高,我们还有两种办法。想象一下如下图,电脑可能走棋如果从4个变为2个,那么效率的提升就会提高一倍。
其实深入下去就会发现,这些优化都是理所当然。因为有一些明显的不好的点直接就可以排除掉。就比如在最开始的时候,没有人会在最左上的0,0下子一样。在实际中,我进行的优化包括:
1、我只会在已有点不超过距离2的区域内下子。如下图可能的下子范围,直接缩小区域
bool Game::hasNeighbor(int x,int y) //距离为2之类返回true
{
bool flag =false;
int redirect[8][2] = { { 1,0},{ 1,1},{ 1,-1},{ 0,1},{ 0,-1},{-1,0},{-1,1},{-1,-1}};
for(int j = 1;j<=2;j++)
{
for(int i = 0;i<8;i++)
{
int m = j*redirect[i][0]+x;
int