問題:給出乙個4x4 tic-tac-toe 的棋局的局面,問先手 "x" 是不是能找在接下來的一步中
找到乙個必勝局面,如果有,輸出第乙個落子位置(按順序)。
極大極小搜尋策略一般都是使用在一些博弈類的遊戲之中:
這樣策略本質上使用的是深度搜尋策略,所以一般可以使用遞迴的方法來實現。在搜尋過程中,對本方有利的搜尋點上應該取極大值,而對本方不利的搜尋點上應該取極小值。
極小值和極大值都是相對而言的。
在搜尋過程中需要合理的控制搜尋深度,搜尋的深度越深,效率越低,但是一般來說,走法越好。
#include using namespace std;
#define inf 100000000
int state[5][5],chess,xi,xj;
char ch;
int minfind(int,int,int);
int maxfind(int,int,int);
bool over(int x,int y)
if (state[i][j]=='o')
}if (row[x]==-4 || row[x]==4 || col[y]==-4 || col[y]==4)
flag = true;
int tot1 = 0, tot2 = 0;
for (int i=0;i<4;i++)
if ((tot1==4 || tot1==-4) && x==y) flag = true;
if ((tot2==4 || tot2==-4) && x==3-y) flag = true;
return flag;
} int maxfind(int x,int y,int mini)
return maxi;
}int minfind(int x,int y,int maxi)
return mini;
}bool tryit()
if (maxi==inf) return true;
}return false;
}int main()
if (chess<=4)
if (tryit()) printf("(%d,%d)\n",xi,xj);
else printf("#####\n");
} return 0;
}
極大極小搜尋
極大極小搜尋演算法 用於圍棋,五子棋,象棋等棋類,結果有三種可能 勝利 失敗和平局。理論上可以窮舉所有的走法,這就需要生成整棵博弈樹。實際上不可行。因此搜尋時可以限 定博弈樹的深度,到達該深度則不再往下搜,相當於只往前看 n 步。如果題意是求出必勝,必敗,必和等,那麼肯定是全部搜完整一棵搜尋樹,此題...
POJ1568 四子棋 博弈
必勝 無論對方走什麼都可以必勝。即 輪己方走時,有true則true,輪對方走時,全true為true。競賽中的題目通常是搜到底然後利用alpha beta剪枝優化,根據兄弟節點的值及時剪枝。人工智慧的演算法中取max的最大值,min的最小值,再優化,相當於1和 1,這是極大極小值演算法。充分不必要...
C語言 極大極小搜尋
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 搜尋n層,第一層取最大值,先輸入兩個整數n randseed,用randseed設定隨機數種子。搜尋時每層4個分支,能不能想這個分支走用函式canmoveto 判斷,內容如下 int canmoveto int m,int d...