首页 > 编程语言 > 详细

Leetcode 999. 车的可用捕获量 C++

时间:2020-03-26 20:36:52      阅读:45      评论:0      收藏:0      [点我收藏+]

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

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

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

class Solution {
public:
	int onedirection(vector<vector<char>>& board, int i, int j, char dir) {//从(i,j)向dir这个方向出发,寻找p
		if (dir == ‘u‘) {
			while (j > 0) {
				j--;
				if (board[i][j] == ‘p‘) { return 1; }
				if (board[i][j] == ‘B‘) { return 0; }
			}
			return 0;
		}
		if (dir == ‘d‘) {
			while (j < 7) {
				j++;
				if (board[i][j] == ‘p‘) { return 1; }
				if (board[i][j] == ‘B‘) { return 0; }
			}
			return 0;
		}
		if (dir == ‘l‘) {
			while (i > 0) {
				i--;
				if (board[i][j] == ‘p‘) { return 1; }
				if (board[i][j] == ‘B‘) { return 0; }
			}
			return 0;
		}
		if (dir == ‘r‘) {
			while (i < 7) {
				i++;
				if (board[i][j] == ‘p‘) { return 1; }
				if (board[i][j] == ‘B‘) { return 0; }
			}
			return 0;
		}
		return -1;//因为要保证必须有一个return, 否则编译不能通过
	}
	int numRookCaptures(vector<vector<char>>& board) {
		int res = 0;
		int i, j;
		for (i = 0; i < 8; i++) {
			for (j = 0; j < 8; j++) {
				if (board[i][j] == ‘R‘) {//寻找R
					res += onedirection(board, i, j, ‘u‘);
					res += onedirection(board, i, j, ‘d‘);
					res += onedirection(board, i, j, ‘l‘);
					res += onedirection(board, i, j, ‘r‘);
					return res;
				}
			}
		}
		return -1;//因为要保证必须有一个return, 否则编译不能通过
	}

};

  技术分享图片

Leetcode 999. 车的可用捕获量 C++

原文:https://www.cnblogs.com/airfy/p/12576914.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!