999. 车的可用捕获量

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

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

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

示例 1:

 

输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
输出:3
解释:
在本例中,车能够捕获所有的卒。
示例 2:

 

输入:[[".",".",".",".",".",".",".","."],[".","p","p","p","p","p",".","."],[".","p","p","B","p","p",".","."],[".","p","B","R","B","p",".","."],[".","p","p","B","p","p",".","."],[".","p","p","p","p","p",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
输出:0
解释:
象阻止了车捕获任何卒。
示例 3:

 

输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","p",".",".",".","."],["p","p",".","R",".","p","B","."],[".",".",".",".",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."]]
输出:3
解释:
车可以捕获位置 b5,d6 和 f5 的卒。
 

提示:

board.length == board[i].length == 8
board[i][j] 可以是 'R','.','B' 或 'p'
只有一个格子上存在 board[i][j] == 'R'

思路:这还要啥思路,水题无疑。

 1 class Solution {
 2 public:
 3     int numRookCaptures(vector<vector<char>>& board) {
 4         int col= board.size();
 5         int row = board[0].size();
 6         int count = 0;
 7         for(int i = 0;i<col;i++)
 8         {
 9             for(int j = 0;j<row;j++)
10             {
11                 if(board[i][j] == 'R')
12                 {
13 
14                     for(int m = j+1;m < row;m++)
15                     {
16                         //north
17                         char c = board[i][m];
18                         if(c== 'p')
19                         {
20                           cout<<"north:"<<i<<","<<m<<endl;
21                             count++;
22                             break;
23                         }
24                         else if(c == 'B')
25                         {
26                             break;
27                         }
28                     }
29                     for(int m = i+1;m<row;m++)
30                     {
31                         //east
32                         char c = board[m][j];
33                         if(c== 'p')
34                         {
35                             cout<<"east:"<<m<<","<<j<<endl;
36                             count++;
37                             break;
38                         }
39                         else if(c == 'B')
40                         {
41                             break;
42                         }
43                     }
44                   for(int m = i-1;m>=0;m--)
45                   {
46                      //west
47                      char c = board[m][j];
48                      if(c== 'p')
49                      {
50                        cout<<"west:"<<m<<","<<j<<endl;
51                          count++;
52                          break;
53                      }
54                      else if(c == 'B')
55                      {
56                          break;
57                      }
58                   }
59                   for(int m = j-1;m>=0;m--)
60                   {
61                      //south
62                      char c = board[i][m];
63                      if(c== 'p')
64                      {
65                         cout<<"south:"<<i<<","<<m<<endl;
66                          count++;
67                          break;
68                      }
69                      else if(c == 'B')
70                      {
71                         break;
72                      }
73                   } 
74                   break;
75                 }
76             }
77         }
78       return count;
79     }
80 };
原文地址:https://www.cnblogs.com/Swetchine/p/11261413.html