參考部落格鏈結
只能說,太厲害了。
第一眼看到這個題可以說是毫無思路,根本無從下手!
這道題最大的難點我覺得在於怎麼實現最優策略行棋。在這道題中,由於題目的特殊性,題目定義alice贏則得分為正,bob贏則得分為負,所以搜尋在哪個空位落子是最優的選擇時,可以通過在棋盤的空白處上不斷嘗試放棋,對於alice而言,他下棋的最優策略是讓棋盤最後下完得分的值越高越好,反之,bob的目標就是讓得分越低越好,一開始我還覺得alice就盡力讓棋盤得分為正不就行了嗎,反正這樣就是代表他贏,但是細細想一下,最優策略應該是要贏並且要盡可能快速地結束戰鬥才對,所以他的最優策略應該是讓得分盡可能高,也就是棋盤上空白的地方盡可能多,也就代表盡快贏下比賽。不得不說這個解法真是精妙啊。
100分**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int a[5]
[5];
int size =3;
bool
win(
int k)
if(a[1]
[1]== a[2]
[2]&& a[1]
[1]== a[3]
[3]&& a[1]
[1]== k)
return
true;if
(a[1][
3]== a[2]
[2]&& a[2]
[2]== a[3]
[1]&& a[2]
[2]== k)
return
true
;return
false;}
intdfs
(int k)
if(k ==1&&
win(2)
)return
-empty-1;
if(k ==2&&
win(1)
)return empty+1;
if(empty ==0)
return0;
int alice =
-1000000
,bob =
10000000
;for
(int i =
1;i <=
3; i++)}
}if(k ==1)
return alice;
if(k ==2)
return bob;
}int
main
(int argc,
char
const
*ar**)
return0;
}
CCF201803 4 棋局評估(100分)
問題描述 試題編號 201803 4 試題名稱 棋局評估 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 alice和bob正在玩井字棋遊戲。井字棋遊戲的規則很簡單 兩人輪流往3 3的棋盤中放棋子,alice放的是 x bob放的是 o alice執先。當同一種棋子佔據一行 一列...
CCF201803 4棋局評估(100分)
這道題用對抗搜尋可以得到答案 試題編號 201803 4 試題名稱 棋局評估 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 alice和bob正在玩井字棋遊戲。井字棋遊戲的規則很簡單 兩人輪流往3 3的棋盤中放棋子,alice放的是 x bob放的是 o alice執先。當同一...
ccf 201803 4 棋局評估 (對抗搜尋)
棋局評估 問題描述 alice和bob正在玩井字棋遊戲。井字棋遊戲的規則很簡單 兩人輪流往3 3的棋盤中放棋子,alice放的是 x bob放的是 o alice執先。當同一種棋子佔據一行 一列或一條對角線的三個格仔時,遊戲結束,該種棋子的持有者獲勝。當棋盤被填滿的時候,遊戲結束,雙方平手。alic...