题目大意:
一个围棋盘的位置总共有三种状态,分别为空、白棋、黑棋,分别用0、1、2来表示。每一个位置都有上下左右四个邻居,当其邻居中有一个空格,则说明这个位置的棋子有气。当然,气是可以传递的,即只要一颗棋子它周围有气,则所有与该棋子相连的相同颜色的棋子都有气。若一个棋子的气为0,则该棋子将被吃掉。在下一个棋子时,若该棋子导致对方的某些棋子的气为0,则该将对方这些气为0的棋子吃掉,它们对应位置则需要被清空。若下棋子时不能导致对方棋子没气,却导致自己的棋子没气了,则这是一种自杀的行为,这种行为将不被允许。
现在假设棋盘大小为10x10,给定一个初始棋盘状态(保证该棋盘状态合法),然后不断的给定输入,每行输入为三个参数i,j,t,表示接下来要在位置i,j处下类型为t的棋子。要求写一个程序,针对每一行输出一个数值,表示这一步被吃掉的棋子个数。当被吃掉的棋子为白棋时,直接输出被吃掉的棋子的个数;若被吃掉的为黑棋,则输出被吃掉的棋的个数的负数;若此次为违规的自杀操作,则输出INT_MAX。
解析:
当给定一个输入时,我们首先判断下的这个棋子是否导致自身的棋子没气;然后判断下的这个棋子是否导致对方的棋子没气,并统计没气的棋子的个数;若对方没有棋子没气,但自身有棋子没气了,则为违规输入;否则,返回对方没气的棋子的个数即可。
那么这里关键问题便是如何判断是否有棋子没气了。这个问题可以用典型的dfs(深度优先)的方法来解决。给定一个位置以及该位置的棋子类型&