1038 : Ares的围棋AI

时间限制:1 Sec 内存限制:256 MiB 提交:19 正确:5

提交 状态 论坛

题目描述

基于深度学习的AlphaGo战胜了人类世界冠军李世石和柯洁,Ares受此鼓舞,也想写出自己的围棋AI,你能帮帮她么?

围棋棋盘可以看做是19×19的点阵,每个点有三种状态:黑子,白子或者空点.

棋盘上,一个棋子周围紧邻(四联通)的空点是这个棋子的“气”,如果紧邻的点有同色棋子存在,则它们组成一块不可分割的整体,“气”也一并计算。如果一个或一块棋子的“气”为0,那它们将被吃掉。

1. 一个棋子的情况,如下左图,白A右侧还有一个空点,此时白棋A气为1,不会被吃掉.。当黑棋在此空点下棋后,白棋A气为0,将被吃掉,从棋盘上拿走。
        

2. 一片棋子的情况,如下图,一整块白棋旁边有一个空点,整块白棋气为1,不会被吃掉。当黑棋在该空点下棋后,白棋气为0,将被吃掉。


3. 当下棋造成双方棋子都没有气时,只有对方的棋子被吃掉。如下左图处,黑棋A位落子后,A位的黑棋和中圈的白棋都没有气,但只有白棋被吃掉。除此之外,落子导致本方棋子没有气是不合法的,如下右图,黑棋A位落子后,自己没有气,而白棋在B位还有一口气,不会被吃掉,因此,黑棋下在A位是不合法的。
本题只有这一种不合法的情况
        

每一局棋都是黑先白后,一人一手轮流着子,不会出现一方连下多手的情况。

输入描述

第一行一个整数n(0<=n<=300),表示这一局棋的总手数。

之后n行,每行两个正整数x,y(1<=x,y<=19)表示落子位置的行数和列数.(行数从上往下,列数从左到右)

输出描述

如果某一手棋不合法,输出"The move x is valid."(不包括引号,x是从1开始计数的落子手数)

如果所有着子均合法,输出一个19×19的矩阵,表示棋盘终局时的状态,黑子用"B"表示,白子用"W"表示,空点"."用表示。

样例输入

9
10 10
9 10
4 4
10 11
4 16
11 10
16 4
10 9
16 16

样例输出

...................
...................
...................
...B...........B...
...................
...................
...................
...................
.........W.........
........W.W........
.........W.........
...................
...................
...................
...................
...B...........B...
...................
...................
...................

来源

风竹曦