当前位置: 面试刷题>> 合法的井字棋状态 (经典算法题500道)


### 题目描述补充 题目:合法的井字棋状态判断 井字棋(Tic-Tac-Toe)是一个两人参与的游戏,在3x3的棋盘上轮流放置棋子,通常是X和O,首先连成一行、一列或对角线三个相同棋子的玩家获胜。现在给定一个3x3的棋盘状态(由'.'表示空格,'X'和'O'表示棋子),请判断该状态是否是一个合法的井字棋游戏状态,即满足以下条件: 1. 棋盘大小为3x3。 2. 每个格子只能被'X'、'O'或'.'(空格)占据。 3. 双方玩家轮流放置棋子,所以X和O的数量之差不能超过1(在棋盘未满的情况下),或者在棋盘已满且平局的情况下,X和O的数量相等。 ### 示例代码 以下是分别用PHP、Python和JavaScript编写的示例代码,用于判断给定的井字棋状态是否合法。 #### PHP ```php function isValidTicTacToe($board) { $counts = ['X' => 0, 'O' => 0, '.' => 0]; foreach ($board as $row) { if (count($row) !== 3) { return false; // 棋盘大小不是3x3 } foreach ($row as $cell) { if (!isset($counts[$cell])) { return false; // 非法字符 } $counts[$cell]++; } } $diff = abs($counts['X'] - $counts['O']); if (($counts['.'] == 0 && $diff != 0) || ($counts['.'] != 0 && $diff > 1)) { return false; // 棋盘已满且X和O数量不等,或棋盘未满且X和O数量差超过1 } return true; } // 示例用法 $board = [ ['X', 'O', 'X'], ['O', 'X', 'O'], ['X', 'O', 'X'] ]; echo isValidTicTacToe($board) ? "合法" : "不合法"; ``` #### Python ```python def isValidTicTacToe(board): counts = {'X': 0, 'O': 0, '.': 0} for row in board: if len(row) != 3: return False # 棋盘大小不是3x3 for cell in row: if cell not in counts: return False # 非法字符 counts[cell] += 1 diff = abs(counts['X'] - counts['O']) if (counts['.'] == 0 and diff != 0) or (counts['.'] != 0 and diff > 1): return False # 棋盘已满且X和O数量不等,或棋盘未满且X和O数量差超过1 return True # 示例用法 board = [ ['X', 'O', 'X'], ['O', 'X', 'O'], ['X', 'O', 'X'] ] print("合法" if isValidTicTacToe(board) else "不合法") ``` #### JavaScript ```javascript function isValidTicTacToe(board) { const counts = {'X': 0, 'O': 0, '.': 0}; for (const row of board) { if (row.length !== 3) { return false; // 棋盘大小不是3x3 } for (const cell of row) { if (!(cell in counts)) { return false; // 非法字符 } counts[cell]++; } } const diff = Math.abs(counts['X'] - counts['O']); if ((counts['.'] === 0 && diff !== 0) || (counts['.'] !== 0 && diff > 1)) { return false; // 棋盘已满且X和O数量不等,或棋盘未满且X和O数量差超过1 } return true; } // 示例用法 const board = [ ['X', 'O', 'X'], ['O', 'X', 'O'], ['X', 'O', 'X'] ]; console.log(isValidTicTacToe(board) ? "合法" : "不合法"); ``` **码小课**网站中有更多关于算法和数据结构的学习内容,包括各种经典问题的详细解析和示例代码,欢迎大家前去学习交流。
推荐面试题