题目描述
对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。
给定一个二维数组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;
}
};