#N3. 中国象棋
中国象棋
题目背景
蒙自一中的同学在课间有丰富多彩的活动,其中一部分同学很喜欢下象棋。
同时,邓老师说这次比赛不能有太多满分,所以让出题组出一道毒瘤题卡你们,所以根据象棋规则改编了一下,再加上实力强大的 kcs007 王老师,就有了如下这道题。
题目描述
在一个 的矩阵中,现在有若干个中国象棋棋子。
现在需要新加一枚棋子到空白处,求有多少种方案使得新加的棋子不被已有的棋子攻击? (也就是问有多少个空白格子不会被任何棋子攻击)
中国象棋棋子攻击范围详解
1. 帅(将) 代表数字1
- 攻击范围:上下左右 1步
- 示例:
- 帅在
(2,2)可攻击:(1,2)(3,2)(2,1)(2,3)
- 帅在
2. 车(車) 代表数字2
- 攻击范围:
- 直线无限延伸(上下左右)
- 会被其他棋子阻挡
- 示例:
- 车在
(3,3)可攻击:- 整行
(3,1)到(3,m) - 整列
(1,3)到(n,3) - 从自己的位置开始延申,直到遇到第一个棋子后停止。
- 整行
- 车在
3. 马(馬) 代表数字3
- 攻击范围:
- 走"日"字(2×1或1×2)
- 蹩马腿规则:
- 当马的某个方向(上下左右其中一个)的相邻格子有其他棋子遮挡,那么这个方向的两个“日”字无法走到。
- 见下图。
4. 炮(砲) 代表数字4
- 攻击范围:
- 攻击需跳过一个棋子
- 示例:
- 炮在
(3,3):- 可攻击
(3,5)若(3,4)有子 - 不能攻击
(3,5)若(3,4)无子
- 可攻击
- 炮在
5. 象(相) 代表数字5
- 攻击范围:
- 走"田"字(对角2步)
- 卡象眼:田字中心有子则不能走
- 示例:
- 象在
(2,2):- 可攻击
(4,4)若(3,3)无子 - 不能攻击
(4,4)若(3,3)有子
- 可攻击
- 象在
6. 士(仕) 代表数字6
- 攻击范围:
- 斜线走1步
- 示例:
- 士在
(2,2)可攻击:(1,1)(1,3)(3,1)(3,3)
- 士在
7. 兵(卒) 代表数字7
- 攻击范围:上下左右 1步
- 示例:
- 兵在
(2,2)可攻击:(1,2)(2,1)(2,3)(3,2)
- 兵在
走子规则图解
帅:(红色代表攻击范围,不受其他棋子影响)举例棋盘大小 。

兵:(红色代表攻击范围,不受其他棋子影响)举例棋盘大小 。

马:(红色代表攻击范围,黄色代表可能影响攻击范围的其他棋子)举例棋盘大小 。

炮:(红色代表攻击范围,黄色代表可能影响攻击范围的其他棋子) 举例棋盘大小 。

车:(红色代表攻击范围,黄色代表可能影响攻击范围的其他棋子)举例棋盘大小 。

象:(红色代表攻击范围,黄色代表可能影响攻击范围的其他棋子)举例棋盘大小 。

士:(红色代表攻击范围,不受其他棋子影响)举例棋盘大小 。

输入格式
测试数据先输入两个整数 ,代表矩阵的长和宽。 接下来 行,每行 个数字,代表初始棋盘状态: 0表示空白,1表示帅,2表示车,3表示马,4表示炮,5表示象,6表示士,7表示兵。
输出格式
对于每组测试数据,输出答案。
3 3
000
010
000
4
样例解释
不会被攻击到。
附件
提示
对于20%的数据,棋盘上没有任何棋子
对于50%的数据,棋盘上没有炮和车
对于100%的数据,