题目名字:车的可用捕获量

题目链接:https://leetcode-cn.com/classic/problems/available-captures-for-rook/description/

题目描述: 在一个 8 x 8的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B”和 “p”给出。大写字符表示白棋,小写字符表示黑棋。车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。返回车能够在一次移动中捕获到的卒的数量。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/available-captures-for-rook
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:先找到R(车)的位置,然后向四个方向遍历,找到卒或者象后,sum+1,退出循环

int numRookCaptures(char** board, int boardSize, int* boardColSize){
int sum=0,i,j,m,n,q=0;
//寻找R的位置坐标
for(i=0;i<7;i++)
{
    for(j=0;j<7;j++)
    {
        if(board[i][j]=='R')
        break;
    }
    if(board[i][j]=='R')
        break;
}
//向上寻找黑色的卒(pawn)
m=i,n=j;
for(q=0;q<7;q++)
{
    if(board[m-1][n]=='p')
    {
        sum++;
        break;//找到上方向任意一个卒后,立即退出寻找
    }
    if(m-1==0||board[m-1][n]=='B')//数组边界检查
        break;
        m--;
}
//向下寻找黑色的卒(pawn)
m=i,n=j;
for(q=0;q<7;q++)
{
    if(board[m+1][n]=='p')
    {
        sum++;
        break;
    }
    if(m+1==7||board[m+1][n]=='B')
        break;
        m++;
}
//向右寻找黑色的卒(pawn)
m=i,n=j;
for(q=0;q<7;q++)
{
    if(board[m][n+1]=='p')
    {
        sum++;
        break;
    }
    if(n+1==7||board[m][n+1]=='B')
        break;
        n++;
}
//向左寻找黑色的卒(pawn)
m=i,n=j;
for(q=0;q<7;q++)
{
    if(board[m][n-1]=='p')
    {
        sum++;
        break;
    }
    if(n-1==0||board[m][n-1]=='B')
        break;
        n--;
}
    return sum;
}
Last modification:September 2nd, 2020 at 02:14 pm