題目描述
對于一個給定的井字棋棋盤,請設計一個高效算法判斷目前玩家是否獲勝。
給定一個二維數組board,代表目前棋盤,其中元素為1的代表是目前玩家的棋子,為0表示沒有棋子,為-1代 表是對方玩家的棋子。
測試樣例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
傳回:true
解題思路
井字棋有四種情況表示目前玩家獲勝,1代表目前玩家棋子 1. 行全為1, 即行的和為3 2. 列全為1, 列的和為 3 3. 主對角全為1, 對角和為3 4. 副對角全為1, 對角和為3 5. 如果擴充為N*N的話,判斷和是否等于N,下 面代碼适用任何情況
完整代碼
class Board {
public:
bool checkWon(vector<vector<int> > board) {
if((board[0][0]+board[1][1]+board[2][2])==3) //正對角線
return true;
if((board[0][2]+board[1][1]+board[2][0])==3) //反對角線
return true;
for(int i=0;i<3;i++)
{
int a=0;
int b=0;
for(int j=0;j<3;j++)
{
a+=board[i][j]; //行
b+=board[j][i]; //列
}
if(a==3)
return true;
if(b==3)
return true;
}
return false;
}
};