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; } };