【每日一题】井字棋

题目来源
牛客网
链接:井字棋

题目描述
给定一个二维数组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

如果扩展为N*N的话,判断和是否等于N

代码展示
以下代码适用于任何情况

class Board {
    
    
public:
    bool checkWon(vector<vector<int> > board) 
    {
    
    
        int i, j;
        for(i = 0; i < board.size(); i++)
        {
    
    
            for(j = 0; j < 3; j++)
                if(board[i][j] != 1)
                    break;
            if(j == board.size())
                return true;
        }
        for(j = 0; j < board.size(); j++)
        {
    
    
            for(i = 0; i < 3; i++)
                if(board[i][j] != 1)
                    break;
            if(i == board.size())
                return true;
        }
        for(i = 0; i < board.size(); i++)
        {
    
    
            if(board[i][i] != 1)
                    break;
            if(i == board.size() - 1)
                return true;
        }
        for(i = 0; i < board.size(); i++)
        {
    
    
            if(board[i][board.size() - i - 1] != 1)
                break;
            if(i == board.size() - 1)
                return true;
        }
        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/zhao_leilei/article/details/110850542