A22858.棋子的气
普及/提高-
通过率:0%
时间限制:2.00s
内存限制:128MB
题目描述
时间限制:2000ms
内存限制:128MB
给定一个 N×N 的棋盘,令 (i,j) 表示棋盘上从上往下第 i 行和从左往右第 j 列中的交叉点(落子点)。
每个交叉点上是否有棋子,由 N 个长度为 N 的字符串 S1, S2, ⋯, SN 表示。
对于一个交叉点 (i,j),若 Si,j 为 B
表示交叉点上有一个黑色棋子;为 W
表示有一个白色棋子;为 .
表示交叉点上没有棋子为空点。
你需要求出棋盘上每个棋子的 气。
单个棋子在棋盘上,与它 直线紧邻 的 空点 是这个棋子的 “气”。
棋子 直线紧邻 的点上,如果有 同色棋子 存在,则它们便相互连接成一个不可分割的整体。它们的气也应 一并计算。
棋子 直线紧邻 的点上,如果有 异色棋子 存在,这口气就不复存在。
如所有的气均为对方所占据,便呈无气状态。无气状态的棋子不能在棋盘上存在。
题目保证棋盘上不存在气为 0 的棋子。
数据范围
- 2≤N≤1000
- Si,j 只包含字符
B
表示黑色棋子,W
表示白色棋子,.
表示空点。
输入格式
每个测试文件格式如下:
N
S1
S2
⋮
SN
输出格式
对于每个测试文件,输出每个棋子的气,空点输出 0。
同一行所有棋子的气在一行中输出,两两之间空格隔开。
输入输出样例
输入#1
9 ....B.B.. ....BBB.W ..B....W. .....WW.. ......... ..B..WWB. .BB...BWW ....WW.W. .........
输出#1
0 0 0 0 8 0 8 0 0 0 0 0 0 8 8 8 0 3 0 0 4 0 0 0 0 4 0 0 0 0 0 0 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 4 4 2 0 0 7 7 0 0 0 2 4 4 0 0 0 0 6 6 0 4 0 0 0 0 0 0 0 0 0 0
输入#2
9 .W.WWWB.. WBBWBB.B. .WBWBBB.B .W.WWBBB. ..W.WWWWB ....WBBB. .WWWWB... W.WWB.B.. .WWBB....
输出#2
0 2 0 9 9 9 2 0 0 2 2 2 9 3 3 0 4 0 0 4 2 9 3 3 3 0 3 0 4 0 9 9 3 3 3 0 0 0 4 0 9 9 9 9 2 0 0 0 0 9 4 4 4 0 0 9 9 9 9 4 0 0 0 3 0 9 9 2 0 4 0 0 0 9 9 2 2 0 0 0 0
说明/提示
样例 1:
棋盘如下图所示:
对于黑色棋子:
棋子 A,它的上下左右一共有 4 口气;
棋子 B, C, D 共享 7 口气;
棋子 E, F, G, H, I 共享 8 口气;
棋子 J 和 K 并不是 直线紧邻 所以它们每个棋子 2 口气,不共享。
对于白色棋子:
棋子 a 有 3 口气, 棋子 b 有 4 口气,并不是 直线紧邻 不共享气;
棋子 c, d 共享 6 口气;
棋子 j, k 共享 6 口气;
棋子 e, f 共享 4 口气;
棋子 g, h, i 共享 4 口气;
样例 2:
棋盘及各个棋子的气如下图所示: