poj1568 極大極小搜尋

2021-09-30 09:57:32 字數 1203 閱讀 3043

問題:給出乙個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...