题目描述:
A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to reach this board position during the course of a valid tic-tac-toe game.
The board is a 3 x 3 array, and consists of characters " ", "X", and "O". The " " character represents an empty square.
Here are the rules of Tic-Tac-Toe:
- Players take turns placing characters into empty squares (" ").
- The first player always places "X" characters, while the second player always places "O" characters.
- "X" and "O" characters are always placed into empty squares, never filled ones.
- The game ends when there are 3 of the same (non-empty) character filling any row, column, or diagonal.
- The game also ends if all squares are non-empty.
- No more moves can be played if the game is over.
Example 1:
Input: board = ["O ", " ", " "]
Output: false
Explanation: The first player always plays "X".
Example 2:
Input: board = ["XOX", " X ", " "]
Output: false
Explanation: Players take turns making moves.
Example 3:
Input: board = ["XXX", " ", "OOO"]
Output: false
Example 4:
Input: board = ["XOX", "O O", "XOX"]
Output: true
Note:
boardis a length-3 array of strings, where each stringboard[i]has length 3.- Each
board[i][j]is a character in the set{" ", "X", "O"}.
class Solution {
public:
bool validTicTacToe(vector<string>& board) {
int x_count=0;
int o_count=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(board[i][j]=='X') x_count++;
else if(board[i][j]=='O') o_count++;
}
}
bool x_win=isWin(board,'X');
bool o_win=isWin(board,'O');
if(x_count<o_count||x_count>o_count+1) return false;
else if(x_count==o_count&&x_win) return false; // 当X和O数目相同时,最后一步必定是O,那么在这之前棋局不能结束
else if(x_count==o_count+1&&o_win) return false; // 当X比O数目大一时,最后一步必定是X,那么在这之前棋局不能结束
return true;
}
bool isWin(vector<string>& board, char c)
{
for(int i=0;i<3;i++)
if(board[i][0]==c&&board[i][0]==board[i][1]&&board[i][1]==board[i][2]) return true;
for(int j=0;j<3;j++)
if(board[0][j]==c&&board[0][j]==board[1][j]&&board[1][j]==board[2][j]) return true;
if(board[0][0]==c&&board[0][0]==board[1][1]&&board[1][1]==board[2][2]) return true;
if(board[2][0]==c&&board[2][0]==board[1][1]&&board[1][1]==board[0][2]) return true;
return false;
}
};
本文介绍了一个算法,用于判断一个给定的3x3井字游戏(Tic-Tac-Toe)局面是否可以通过合法的游戏过程达到。通过计算X和O的数量,以及检查是否有胜利者,该算法能有效识别非法游戏状态。
602

被折叠的 条评论
为什么被折叠?



