求當前井字棋局的得分。
用dfs虛構一下搜尋樹,每個節點對應乙個不同的棋局。
每個節點有乙個situation()情況評估,若勝負已定,則對應該棋局的評分;否則為0,表示勝負未定或平局。
每個節點還有乙個得分用於return,如果situation()值不為0,勝負已定,則節點不再向下拓展,得分即為situation()值;否則若棋盤已滿為平局,得分為0,若棋盤未滿勝負未定,節點向下拓展,得分需要根據子節點的得分及當前下棋人cur確定。
出題人有一句「當棋盤被填滿的時候,遊戲結束,雙方平手」。absolutely wrong!棋盤填滿不一定平手,一定是先要situation()為0再判斷棋盤滿不滿,以確定是否平手。
#include using namespace std;
struct tnode
tnode(tnode *y)
int remain()
return ret;
}int situation()
if (chess[1] == chess[4] && chess[4] == chess[7] && chess[1] != 0)
if (chess[2] == chess[5] && chess[5] == chess[8] && chess[2] != 0)
if (chess[0] == chess[1] && chess[1] == chess[2] && chess[0] != 0)
if (chess[3] == chess[4] && chess[4] == chess[5] && chess[3] != 0)
if (chess[6] == chess[7] && chess[7] == chess[8] && chess[6] != 0)
if (chess[0] == chess[4] && chess[4] == chess[8] && chess[0] != 0)
if (chess[2] == chess[4] && chess[4] == chess[6] && chess[2] != 0)
return 0;
}};int dfs(tnode *x, int cur)
}if (cur == 1)
return mmax;
else
return mmin;
}int main()
return 0;
}
CCF CSP201803 4 棋局評估
問題描述 alice和bob正在玩井字棋遊戲。井字棋遊戲的規則很簡單 兩人輪流往3 3的棋盤中放棋子,alice放的是 x bob放的是 o alice執先。當同一種棋子佔據一行 一列或一條對角線的三個格仔時,遊戲結束,該種棋子的持有者獲勝。當棋盤被填滿的時候,遊戲結束,雙方平手。alice設計了一...
CCF CSP題解 201512 4 送貨
求字典序最小尤拉路。似乎不能用 fluery 演算法 o e 2 fluery 演算法的思路是 延申的邊盡可能不是除去已走過邊的圖的橋 割 每走一步都要判斷是否是割,應當會超時。採用 hierholzer 演算法 o v e 亦稱逐步插入迴路法。思路見 注意根據題意,每次選取未走過頂點最小的邊延申。...
ccf csp 歷年真題題解
更新中 ccf csp 2013冬季真題題解 ccf csp 2014春季真題題解 ccf csp 2014秋季真題題解 ccf csp 2014冬季真題題解 ccf csp 2015春季真題題解 ccf csp 2015秋季真題題解 ccf csp 2015冬季真題題解 ccf csp 2016春...