CCF CSP201803 4 棋局評估

2022-07-24 13:09:21 字數 2311 閱讀 5679

問題描述

alice和bob正在玩井字棋遊戲。

井字棋遊戲的規則很簡單:兩人輪流往3*3的棋盤中放棋子,alice放的是「x」,bob放的是「o」,alice執先。當同一種棋子佔據一行、一列或一條對角線的三個格仔時,遊戲結束,該種棋子的持有者獲勝。當棋盤被填滿的時候,遊戲結束,雙方平手。

alice設計了一種對棋局評分的方法:

- 對於alice已經獲勝的局面,評估得分為(棋盤上的空格子數+1);

- 對於bob已經獲勝的局面,評估得分為 -(棋盤上的空格子數+1);

- 對於平局的局面,評估得分為0;

例如上圖中的局面,alice已經獲勝,同時棋盤上有2個空格,所以局面得分為2+1=3。

由於alice並不喜歡計算,所以他請教擅長程式設計的你,如果兩人都以最優策略行棋,那麼當前局面的最終得分會是多少?

輸入格式

輸入的第一行包含乙個正整數t,表示資料的組數。

每組資料輸入有3行,每行有3個整數,用空格分隔,分別表示棋盤每個格仔的狀態。0表示格仔為空,1表示格仔中為「x」,2表示格仔中為「o」。保證不會出現其他狀態。

保證輸入的局面合法。(即保證輸入的局面可以通過行棋到達,且保證沒有雙方同時獲勝的情況)

保證輸入的局面輪到alice行棋。

輸出格式

對於每組資料,輸出一行乙個整數,表示當前局面的得分。

樣例輸入

31 2 1

2 1 2

0 0 0

2 1 1

0 2 1

0 0 2

0 0 0

0 0 0

0 0 0

樣例輸出3-4

0樣例說明

第一組資料:

alice將棋子放在左下角(或右下角)後,可以到達問題描述中的局面,得分為3。

3為alice行棋后能到達的局面中得分的最大值。

第二組資料:

bob已經獲勝(如圖),此局面得分為-(3+1)=-4。

第三組資料:

井字棋中若雙方都採用最優策略,遊戲平局,最終得分為0。

資料規模和約定

對於所有評測用例,1 ≤ t ≤ 5。

博弈,f[s]表示s狀態下的得分情況,正數表示勝利負數表示輸,0表示平局。

邊界情況是:1)當前棋局已經有玩家勝出,此時f[s]= -(空格數+1).由於狀態都合法,所以此時一定是對手勝利而輪到自己下棋,所以此時的f[s]是負數表示自己輸了,且對手可以獲得-f[s]分數。

2)當前棋局已經沒有空位,且未決出勝負。此時f[s]=0;

轉移的時候,每個人都先考慮是否能贏,能贏的話挑分數大的狀態轉移。

不能贏考慮是否能平,不能平只能輸,選乙個輸的最小的狀態。

1 #include2

using

namespace

std;

3#define pii pair4 mapf;

5int blank(string str)

6int check(string

str)

13if(str[0]=='

1'&&str[4]=='

1'&&str[8]=='

1'||

14 str[2]=='

1'&&str[4]=='

1'&&str[6]=='

1')return1;

15if(str[0]=='

2'&&str[4]=='

2'&&str[8]=='

2'||

16 str[2]=='

2'&&str[4]=='

2'&&str[6]=='

2')return2;

17return0;

18}19void dfs(string state,int

cur)else

if(r==2

)else

if(b==0)31

else

else

if(cur==2)42

if(f[state]<0

)else

if(f[state]>0

)else ping=1

;47 state[i]='0'

;48}49

}50if(win!=-999

)else

if(ping!=-999)f[state]=0;53

else f[state]=lose;54}

55}56int

main()

67if(!f.count(str))cout

71return0;

72 }

CCF CSP題解 201803 4 棋局評估

求當前井字棋局的得分。用dfs虛構一下搜尋樹,每個節點對應乙個不同的棋局。每個節點有乙個situation 情況評估,若勝負已定,則對應該棋局的評分 否則為0,表示勝負未定或平局。每個節點還有乙個得分用於return,如果situation 值不為0,勝負已定,則節點不再向下拓展,得分即為situa...

201803 4 棋局評估

問題描述 alice和bob正在玩井字棋遊戲。井字棋遊戲的規則很簡單 兩人輪流往3 3的棋盤中放棋子,alice放的是 x bob放的是 o alice執先。當同一種棋子佔據一行 一列或一條對角線的三個格仔時,遊戲結束,該種棋子的持有者獲勝。當棋盤被填滿的時候,遊戲結束,雙方平手。alice設計了一...

201803 4 棋局評估

這道題當初卡了我不知道多少遍,每次動手想做一下csp認證的第三道題,都從這道題開始,但每次都被卡住。直接是連題意都有點讀不懂,但是讀懂了之後就會發現,這道題除了特別繁瑣之外,好像也沒用到什麼很難的演算法。借鑑了這位大佬的思路 我沒發現比這個還簡潔的 所以就學了一下這個思路,比較容易理解。對這道題,我...