A22858.棋子的气

普及/提高-

官方

通过率:0%

时间限制:2.00s

内存限制:128MB

题目描述

时间限制:2000ms
内存限制:128MB

给定一个 N×NN \times N 的棋盘,令 (i,j)(i, j) 表示棋盘上从上往下第 ii 行和从左往右第 jj 列中的交叉点(落子点)。
每个交叉点上是否有棋子,由 NN 个长度为 NN 的字符串 S1, S2, , SNS_1,\ S_2,\ \cdots,\ S_N 表示。

对于一个交叉点 (i,j)(i, j),若 Si,jS_{i,j}B 表示交叉点上有一个黑色棋子;为 W 表示有一个白色棋子;为 . 表示交叉点上没有棋子为空点。

你需要求出棋盘上每个棋子的 \bf{气}

单个棋子在棋盘上,与它 直线紧邻\bf{直线紧邻}空点\bf{空点} 是这个棋子的 “气”\bf{“气”}

棋子 直线紧邻\bf{直线紧邻} 的点上,如果有 同色棋子\bf{同色棋子} 存在,则它们便相互连接成一个不可分割的整体。它们的气也应 一并计算\bf{一并计算}

棋子 直线紧邻\bf{直线紧邻} 的点上,如果有 异色棋子\bf{异色棋子} 存在,这口气就不复存在。

如所有的气均为对方所占据,便呈无气状态。无气状态的棋子不能在棋盘上存在。

题目保证棋盘上不存在气为 0 的棋子。\bf{题目保证棋盘上不存在气为\ 0\ 的棋子。}

数据范围\large{数据范围}

  • 2N10002 \le N \le 1000
  • Si,jS_{i,j} 只包含字符 B 表示黑色棋子,W 表示白色棋子, . 表示空点。

输入格式

每个测试文件格式如下:

N\tt{N}
S1\tt{S_1}
S2\tt{S_2}
\tt{\vdots}
SN\tt{S_N}

输出格式

对于每个测试文件,输出每个棋子的气,空点输出 00
同一行所有棋子的气在一行中输出,两两之间空格隔开。

输入输出样例

  • 输入#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

说明/提示

样例 11

棋盘如下图所示:

对于黑色棋子:
棋子 A\tt{A},它的上下左右一共有 4\tt{4} 口气;
棋子 B, C, D\tt{B,\ C,\ D} 共享 7\tt{7} 口气;
棋子 E, F, G, H, I\tt{E,\ F,\ G,\ H,\ I} 共享 8\tt{8} 口气;
棋子 J\tt{J}K\tt{K} 并不是 直线紧邻\bf{直线紧邻} 所以它们每个棋子 2\tt{2} 口气,不共享。

对于白色棋子:
棋子 a\tt{a}3\tt{3} 口气, 棋子 b\tt{b}4\tt{4} 口气,并不是 直线紧邻\bf{直线紧邻} 不共享气;
棋子 c, d\tt{c,\ d} 共享 6\tt{6} 口气;
棋子 j, k\tt{j,\ k} 共享 6\tt{6} 口气;
棋子 e, f\tt{e,\ f} 共享 4\tt{4} 口气;
棋子 g, h, i\tt{g,\ h,\ i} 共享 4\tt{4} 口气;

样例 22:

棋盘及各个棋子的气如下图所示:

首页