关键观察
如果某个敌方('x'
)连通块的“气”(上下左右相邻的空位 '.'
)只有 1 个,那么把我方子('o'
)下在这唯一气上,立刻吃掉该连通块全部棋子。
因此问题化简为:
扫描棋盘,按 4 联通把所有敌方连通块分组(BFS/DFS)。
对每个敌方连通块统计:
小强最近在研究围棋,他希望有一个程序能告诉他一步之内,有哪些位置可以直接吃掉别人的棋子,吃几个。
围棋可以在围住别人的情况下,吃掉别人的棋子,详见样例。
标准围棋的棋盘是19×19的,但小强只是想研究围棋的规则,故假定棋盘大小为n×n。
围棋吃子的规则:
第一行输入一个整数 n(5≤n≤1000),表示棋盘的大小是 n×n的。
随后 n 行,每行 n 个字符:
'.'
表示该位置没有棋子'x'
表示该位置是敌方棋子'o'
表示该位置是我方棋子下一步只能在 '.'
的位置落子。
数据保证初始局面不会有相互吃的情况,即初始局面合法
若有 k个位置落子可以吃掉至少一个敌方棋子:
输入
6
.oo.o.
oxxox.
ox.xox
xoxoox
xoo...
.x..ox
输出
4
2 6 1
3 3 5
5 6 1
6 1 2
说明
有 4 个位置可以吃掉对手的棋子: