目录
牛客_井字棋
解析代码
井字棋有四种情况表示当前玩家获胜,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) {
// 当前玩家是否胜出!!!不是有玩家胜出
int row = board.size(), col = board[0].size();
for (int i = 0, cnt = 0; i < row; ++i) { // 每行
for (int j = 0; j < col; ++j)
cnt += board[i][j];
// if (cnt == col || cnt == -col)
// 当前玩家是否胜出!!!不是有玩家胜出
if (cnt == col)
return true;
}
for (int i = 0, cnt = 0; i < col; ++i) { // 每列
for (int j = 0; j < row; ++j)
cnt += board[i][j];
// if (cnt == row || cnt == -row)
// 当前玩家是否胜出!!!不是有玩家胜出
if (cnt == row)
return true;
}
int cnt = 0;
for (int i = 0; i < row; ++i) {
cnt += board[i][i];
}
// if (cnt == row || cnt == -row)
// 当前玩家是否胜出!!!不是有玩家胜出
if (cnt == row)
return true;
cnt = 0;
for (int i = 0; i < row; ++i) {
cnt += board[i][row - 1 - i];
}
// if (cnt == row || cnt == -row)
// 当前玩家是否胜出!!!不是有玩家胜出
if (cnt == row)
return true;
return false;
}
};