每日一题:车(JU)的可用捕获量

在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。

车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。

返回车能够在一次移动中捕获到的卒的数量。

这题真的简单。。。随便记记就,四个方向走就完事了。今天一定要开始Go语言和C++ http项目。

class Solution {
public:
    int numRookCaptures(vector<vector<char>>& board) {
        int x, y;
        int ans = 0;
        int row = board.size(), column = board[0].size();
        for (int i = 0; i < row; i++){
            for (int j = 0; j < column; j++){
                if (board[i][j] == 'R'){
                    x = i, y = j;
                }
            }
        }
        int left = x - 1, right = x + 1, up = y - 1, down = y + 1;
        while (left >= 0 || right < row || up >= 0 || down < column){
            if (left >= 0){
                if (board[left][y] == 'p'){
                    ans++;
                    left = -1;
                }
                else if (board[left][y] == 'B'){
                    left = -1;
                }
                else{
                    left--;
                }
            }
            if (right < row){
                if (board[right][y] == 'p'){
                    ans++;
                    right = row;
                }
                else if (board[right][y] == 'B'){
                    right = row;
                }
                else{
                    right++;
                }
            }
            if (up >= 0){
                if (board[x][up] == 'p'){
                    ans++;
                    up = -1;
                }
                else if (board[x][up] == 'B'){
                    up = -1;
                }
                else{
                    up--;
                }
            }
            if (down < column){
                if (board[x][down] == 'p'){
                    ans++;
                    down = column;
                }
                else if (board[x][down] == 'B'){
                    down = column;
                }
                else{
                    down++;
                }
            }
        }
        return ans;
    }
};
发布了76 篇原创文章 · 获赞 10 · 访问量 8247

猜你喜欢

转载自blog.csdn.net/weixin_38742280/article/details/105112011