[leetcode 999] Available Captures for Rook

Problem:

給定一個棋盤,棋盤上有城堡、堡壘、兵,城堡有上、下、左、右的走法,直到碰到邊界或堡壘就停止,城堡可以吃兵,試求城堡總共可以吃幾隻兵。

Programming Language: C++

Execution time: 4 ms

Solution:

1.先找城堡的位置

2.判斷城堡的上下左右,是否有存在兵。

class Solution {
public:
    void rookPos(vector<vector<char>>& board, int *sx, int *sy){
        int row, col;
        for(row = 0;row < board.size();row++)
            for(col = 0;col < board[0].size();col++)
                if(board[row][col] == 'R'){
                    *sy = row, *sx = col;
                    return;
                }
    }
    
    int numRookCaptures(vector<vector<char>>& board) {
        int startx, starty, tmpx, tmpy, count = 0;
        
        // find position of the rook 
        rookPos(board, &startx, &starty);
        
        // check four directions
        // left
        tmpx = startx - 1;
        while(tmpx >= 0 && board[starty][tmpx] != 'p' && board[starty][tmpx] != 'B') tmpx--;
        if(tmpx >= 0) count += board[starty][tmpx] == 'p';
        
        // up
        tmpy = starty - 1;
        while(tmpy >= 0 && board[tmpy][startx] != 'p' && board[tmpy][startx] != 'B') tmpy--;
        if(tmpy >= 0) count += board[tmpy][startx] == 'p';
        
        // right
        tmpx = startx + 1;
        while(tmpx < board[0].size() && board[starty][tmpx] != 'p' && board[starty][tmpx] != 'B') tmpx++;
        if(tmpx < board[0].size()) count += board[starty][tmpx] == 'p';
        
        // down
        tmpy = starty + 1;
        while(tmpy < board.size() && board[tmpy][startx] != 'p' && board[tmpy][startx] != 'B') tmpy++;
        if(tmpy < board.size()) count += board[tmpy][startx] == 'p';
        
        return count;
    }
};

 

Leave a comment