已结束 GESP排位赛#8

A3030 | 棋子的气

来源官方 / 2024
时间限制2s
内存限制128MB
通过 / 提交0/0

题目描述

时间限制:2000ms

内存限制:128MB


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

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

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

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

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

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

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

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

$\large{数据范围}$

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

输入格式

每个测试文件格式如下:

$\tt{N}$

$\tt{S_1}$
$\tt{S_2}$
$\tt{\vdots}$
$\tt{S_N}$

输出格式

对于每个测试文件,输出每个棋子的气,空点输出 $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
C++ 编辑器
输入
输出